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.