[Tutor] Staticmethod & Classmethod Question

Chris Kavanagh ckava3 at gmail.com
Sat Feb 25 09:31:41 CET 2012


Hey Everyone,

	I came across this code in 'A Byte Of Python' & realized there was a 
line I didn't understand. The line is "howMany = staticmethod(howMany)" 
(Complete code pasted below.)

	I don't think, in my very short Python career, I've heard of a 
staticmethod or classmethod. There's very little explanation of them in 
the book. I've googled them, but am still confused on exactly what they 
are & why they should be used. The only sense I can make of them is, a 
staticmethod can be called WITHOUT actually creating an object first.

	Anyways, if someone could give me a simple explanation with a very 
simple example, I will be elated! As always, thank you in advance for 
any help!! Code Below:

PS: Please keep in mind, Python is my 1st language, & I'm very new to it 
(4 to 5 months).



class Robot:
     '''Represents a robot, with a name.'''

     # A class variable, counting the number of robots
     population = 0

     def __init__(self, name):
         '''Initializes the data.'''
         self.name = name
         print('(Initializing {0})'.format(self.name))

         # When this person is created, the robot
         # adds to the population
         Robot.population += 1

     def __del__(self):
         '''I am dying.'''
         print('{0} is being destroyed!'.format(self.name))

         Robot.population -= 1

         if Robot.population == 0:
             print('{0} was the last one.'.format(self.name))
         else:
             print('There are still {0:d} robots 
working.'.format(Robot.population))

     def sayHi(self):
         '''Greeting by the robot.

         Yeah, they can do that.'''
         print('Greetings, my masters call me {0}.'.format(self.name))

     def howMany():
         '''Prints the current population.'''
         print('We have {0:d} robots.'.format(Robot.population))
     howMany = staticmethod(howMany)

droid1 = Robot('R2-D2')
droid1.sayHi()
Robot.howMany()

droid2 = Robot('C-3PO')
droid2.sayHi()
Robot.howMany()

print("\nRobots can do some work here.\n")

print("Robots have finished their work. So let's destroy them.")
del droid1
del droid2

Robot.howMany()


More information about the Tutor mailing list