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不可调用类自身方法
在类中引用属性:属性引用输出全部正常