staticmethod与classmethod是Python中的两个用于方法的装饰器,其应用范围并不广泛,故本文只对其作简要讨论。
1 staticmethod
staticmethod装饰器用于将一个普通方法转变为一个普通函数。可以去除在方法调用时,类对象自动与方法的self参数进行绑定这一行为。staticmethod常用于定义一些与当前类关系紧密的普通函数:
class Test:
@staticmethod
def t():
print('t')
Test().t()
上述代码定义了一个静态方法。此静态方法与定义在类外部的普通函数一致,没有对象自动绑定这一行为,也没有self参数。
2 classmethod
classmethod装饰器用于将一个普通方法转变为一个类方法。使得此方法在调用时,不通过类对象对此方法进行调用,而是使用类本身进行调用,且类方法的第一参数将自动与类本身进行绑定。类方法常用于定义备选的__init__方法:
class Test:
@classmethod
def t(cls):
print('t')
return cls()
Test.t()
上述代码即定义了一个类方法,其通过Test类本身,而不是Test()进行调用。作用为进行一次输出后再生成并返回一个类实例。
2018年6月于苏州