On Class namespaces, calling methods
Patrick Maupin
pmaupin at gmail.com
Sat Apr 10 11:59:45 EDT 2010
On Apr 10, 9:26 am, vsoler <vicente.so... at gmail.com> wrote:
> class Uno:
> a=1
> def m():
> print "mouse"
>
...
> I cannot write
> Uno.m()
By default (at least in Python 2.x), Python will pass any function
which is accessed through getattr on class or instance (usually called
a "method") an instance of the class as the first parameter.
You can avoid this by using the @staticmethod decorator in front:
class Uno:
a = 1
@staticmethod
def m():
print "mouse"
Then you can call Uno.m() directly.
This puts a "staticmethod" wrapper around m(), which explains to the
interpreter not to try to pass it the instance variable.
Also useful is @classmethod.
Interestingly, if you don't use staticmethod, the value in the class's
dictionary is an ordinary function, but if you do use staticmethod,
you no longer have a callable function in the class's dictionary:
>>> class fred:
... def m():
... print "foo"
...
>>> fred.__dict__['m']()
foo
>>> class fred:
... @staticmethod
... def m():
... print "foo"
...
>>> fred.__dict__['m']()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'staticmethod' object is not callable
HTH,
Pat
Regards,
Pat
More information about the Python-list
mailing list