Python之cls,self在类中的区别

class A(object):
    a = 'a'
    @staticmethod
    # 类中方法调用,属性引用
    def foo1(name):
        print ('hello', name)
        # A.foo3('hi')    # 报错
        # print(A.a)    # 输出正常
    def foo2(self, name):
        print ('hello', name)
        # self.foo3('hi')    # 输出正常
        # print(A.a)    # 输出正常
    def foo3(self, user):
        print('sasa',user)
    @classmethod
    def foo4(cls, name):
        print ('hello', name)
        # cls().foo4('ni')    # 输出正常
        # print(A.a)    # 输出正常
# 实例化
a = A()
a.foo1('world')    # 输出正常
a.foo2('world')    # 输出正常
a.foo4('world')    # 输出正常
# 非实例化
A.foo1('world')    # 输出正常
A.foo2('world')    # 报错
A.foo4('world')    # 输出正常

上述代码在使用时部分需要#,或去除#

@staticmethod或@classmethod是可以在类中使用的装饰器,
classmethod,self,staticmethod其差别可以作以下四个部分总结
实例化:实例化方法输出全部正常
非实例化:使用self的方法报错,必须实例化才可以引用
在类中调用方法:staticmethod不可调用类自身方法
在类中引用属性:属性引用输出全部正常

Python之cls,self在类中的区别

上一篇:A+B问题 涉及EOF


下一篇:谈一谈|个人博客网站开发记录三-难点技术分析