python classmethod和staticmethod区别

其实classmethod和staticmethod没有什么特别大的区别。
但还是需要注意如下几点:

  1. staticmethod函数参数没有要求,而classmethod函数第一个参数必须传类(该参数名通常使用cls)。

    1
    2
    3
    4
    5
    6
    7
    8
    class (object):
    def class_method(cls):
    print('this is class method!')
    @staticmethod
    def static_method():
    print('this is static method!')
  2. 调用的方法其实类似,实际上classmethod是先获取了实例的类,再调取该方法。如果直接使用类调用,则无需进行获取类。

    1
    2
    3
    4
    a = MethodClass()
    a.class_method()
    a.__class__.class_method()