Python的method, class method, static method

馋奶兔 提交于 2019-12-09 20:03:57

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= <class '__main__.A'> static method, A= <class '__main__.A'>

method就跟C++, Java中的成员方法一样,使用也最普遍;static method也类似,但在Python中可以定义为模块的function也是一样,使用staticmethod的原因只是在逻辑上进行区分
而classmethod与staticmethod的区别在与classmethod的参数cls可以被重载:

class AA(A):
    pass

if __name__ == '__main__':
    aa = AA()
    aa.cm()

结果如下:

class method, cls= <class '__main__.AA'>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!