classmethod(function)
該函數是一個裝飾器函數,用來指定一個類的方法為類方法,沒有此函數指定的類的方法則稱為實例方法。
聲明類方法的語法如下:
class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
類方法的第一個參數是類對象參數,在方法被調用的時候自動將類對象傳入,參數名稱約定為 cls。如果一個方法被標示為類方法,則該方法可被類對象調用(如 C.f()
),也可以被類的實例對象調用(如 C().f()
)。
另外,類被繼承后,子類也可以調用父類的類方法,但是第一個參數傳入的是子類的類對象。
示例
>>> class ClassA:
... @classmethod
... def class_method(cls, arg1):
... print(cls)
... print(arg1)
...
>>> ClassA.class_method('This is a class method.')
<class '__main__.ClassA'>
This is a class method.
>>>
>>> ClassA().class_method('This is a class method.')
<class '__main__.ClassA'>
This is a class method.
>>>
>>>
>>> class ClassB(ClassA):
... pass
...
>>> ClassB.class_method('Class method is called for a derived class.')
<class '__main__.ClassB'>
Class method is called for a derived class.
>>>
>>> ClassB().class_method('Class method is called for a derived class.')
<class '__main__.ClassB'>
Class method is called for a derived class.