装饰器可以用于包装类的静态方法和类方法。静态方法的定义中没有self参数,可以通过类直接来调用。类方法中虽然没有self参数,但是有一个类似的参数——cls,类方法可以通过对象直接调用,参数cls自动关联到类。在方法前面使用@来列出装饰器。
代码语言:javascript复制class A:
@staticmethod
def a():
print("a")
@classmethod
def b(cls):
print("i am",cls)
>>> A.a()
a
>>> A.b
<bound method A.b of <class '__main__.A'>>
>>> A.b()
i am <class '__main__.A'>
不用装饰器的语法,只通过函数也可以定义静态方法和类方法。
代码语言:javascript复制>>> class A:
def a():
print("a")
a=staticmethod(a)
def b(cls):
print("i am",cls)
b=classmethod(b)
>>> A.a()
a
>>> A.b()
i am <class '__main__.A'>
前面提到的类的特性也可以通过装饰器的方法来定义。