classmethod
是一個描述符,包裝的功能,並且可以調用生成的對象上的類或(等效地)其一個實例:
>>> class x(object):
... def c1(*args): print 'c1', args
... c1 = classmethod(c1)
... @classmethod
... def c2(*args): print 'c2', args
...
>>> inst = x()
>>> x.c1()
c1 (<class '__main__.x'>,)
>>> x.c2()
c2 (<class '__main__.x'>,)
>>> inst.c1()
c1 (<class '__main__.x'>,)
>>> inst.c2()
c2 (<class '__main__.x'>,)
正如你看到的,無論是直接或修飾語法定義它,無論你把它的類或實例中,classmethod
始終接收類作爲其第一個參數。
一類方法的主要用途是定義 「另類構造」:
>>> class y(object):
... def __init__(self, astring):
... self.s = astring
... @classmethod
... def fromlist(cls, alist):
... x = cls('')
... x.s = ','.join(str(s) for s in alist)
... return x
... def __repr__(self):
... return 'y(%r)' % self.s
...
>>> y1 = y('xx')
>>> y1
y('xx')
>>> y2 = y.fromlist(range(3))
>>> y2
y('0,1,2')
現在,如果你繼承y
,在類方法繼續工作,如:
>>> class k(y):
... def __repr__(self):
... return 'k(%r)' % self.s.upper()
...
>>> k1 = k.fromlist(['za','bu'])
>>> k1
k('ZA,BU')
重複數據刪除:HTTP:/ /stackoverflow.com/questions/38238/what-are-class-methods-in-python-for – 2009-12-23 03:46:32
它總是讓我着迷,即使在7年後問題仍然有效和理智! :) – NoobEditor 2016-07-16 18:09:39