staticmethod and classmethod

Steven Bethard steven.bethard at gmail.com
Tue May 24 11:57:23 EDT 2005


C Gillespie wrote:
> Does anyone know of any examples on how (& where) to use staticmethods and
> classmethods?

My personal experience is that I almost *never* want a staticmethod. 
The things that I would have written as a staticmethod in Java I simply 
write as a module-level function in Python.

I do occasionally used classmethods though to build alternate 
constructors.  I recently had a class with a constructor that looked like:

class C(object):
     def __init__(self, *args):
         ...

I already had code working with this constructor, but I needed to add an 
optional 'index' parameter.  I found the clearest way to do this was 
something like:

class C(object):
     def __init__(self, *args):
         ...
     @classmethod
     def indexed(cls, index, *args):
         ...
         obj = cls(*args)
         obj.index = index
         ...
         return obj

Then the classes that needed the 'index' parameter simply use 
C.indexed() as the constructor instead of C().

STeVe



More information about the Python-list mailing list