python-静态方法类方法

静态方法和类方法

  • 静态方法包装在staticmethod类的对象中,定义中没有self,可直接通过类来调用方法

  • 类方法包装在classmethod类的对象中,参数为cls,虽然可以通过对象来调用,但是实际上cls还是会关联到类的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class MyClass():
    def tellme():
    print("i am a static method,without self")
    tellme = staticmethod(tellme)

    class MyClass():
    def tellme(cls):
    print("i am a class method,with args sls")
    tellme = classmethod(tellme)

    MyClass.tellme()

    无需实例化,即可直接通过类来调用方法,如果不这样写,那么实例化之后是无法调用方法的,因为函数缺少了参数self

    以上即为使用staticmethodclassmethod手工包装静态方法和类方法

装饰器

用来替代手工包装,可用于包装任何可调用对象,还可用于方法和函数。装饰器可以有多个,指定多个时,应用的顺序与列出的顺序相反

1
2
3
4
5
class MyClass():
@staticmethod
def tellme():
print("new decorator")
MyClass.tellme()