On Sun, 24 Aug 2008 11:09:46 +0200, Hrvoje Niksic wrote: > Hussein B <[EMAIL PROTECTED]> writes: > >> Hi, >> I'm familiar with static method concept, but what is the class method? >> how it does differ from static method? when to use it? -- >> class M: >> def method(cls, x): >> pass >> >> method = classmethod(method) > > Use it when your method needs to know what class it is called from.
Ordinary methods know what class they are called from, because instances know what class they belong to: def method(self, *args): print self.__class__ You use class methods when you DON'T need or want to know what instance it is being called from, but you DO need to know what class it is called from: @classmethod def cmethod(cls, *args): print cls Why is this useful? Consider the dict method "fromkeys". You can call it from any dictionary, but it doesn't care which dict you call it from, only that it is being called from a dict: >>> {}.fromkeys([1, 2, 3]) {1: None, 2: None, 3: None} >>> {'monkey': 42}.fromkeys([1, 2, 3]) {1: None, 2: None, 3: None} Any method that behaves like dict.fromkeys() is an excellent candidate for classmethod. -- Steven -- http://mail.python.org/mailman/listinfo/python-list