PEP 318: Can't we all just get along?
Jeff Shannon
jeff at ccvcorp.com
Fri Aug 20 15:03:54 EDT 2004
Neil Zanella wrote:
>To summarize, here are the two reasons to use staticmethod:
>
>1. You want to group a bunch of functions together. However, as it happens
> such functions are not useful outside of a given class, so you use
> staticmethod to place them where they belong. Perhaps you do not
> have enough such functions to warrant their placement inside a
> module of its own.
>
>2. You need to use inheritance and polymorphism but you don't need instances,
> or perhaps you simply need instance independent polymorphism at the class
> level.
>
>
It seems to me that the most common case for staticmethod is when you
have a function which does not rely directly on the attributes of an
existing class/instance, but which *conceptually* belongs with that
class. For example, in wxPython, the wxImage class needs to have
handlers for various filetypes installed before one can create wxImage
instances from files of that type. You can't use a normal method,
obviously, because you need to install these handlers before you have an
instance to call a method on. You can implement them as a totally
independent function (and wxPython used to do this), using a naming
convention to indicate the relatedness. But really, the best way to do
this is as a staticmethod on the wxImage class. It can be called before
any instances are created, and it paves the way for creating such instances.
(Both of your examples seem set on the idea of classes which contain
*only* staticmethods; I would submit that this is an extremely unusual
case, though perhaps not without some utility.)
Jeff Shannon
Technician/Programmer
Credit International
More information about the Python-list
mailing list