method是类的成员函数,必须由类的实例来调用,可以访问类的实例,第一个参数默认是实例。
class method可以由类,类的实例来调用,但第一个参数默认是类 static method可以由类,类的实例来调用,没有默认参数class A: def __init__(self): self.i = 1 @classmethod def cm(cls): print("class method, cls=", cls) def m(self): print("method, self={0}, i={1}".format(self, self.i)) @staticmethod def sm(): print("static method, A=", A)if __name__ == '__main__': a = A() a.m() a.cm() a.sm()
结果如下:
method, self=<__main__.A object at 0x02A2D190>, i=1 class method, cls=static method, A=
method就跟C++, Java中的成员方法一样,使用也最普遍;static method也类似,但在Python中可以定义为模块的function也是一样,使用staticmethod的原因只是在逻辑上进行区分
而classmethod与staticmethod的区别在与classmethod的参数cls可以被重载:class AA(A): passif __name__ == '__main__': aa = AA() aa.cm()
结果如下:
class method, cls=