class MethodTest():
var1 ="class var"
def__init__(self, var2 = "object var"):
self.var2 = var2
@staticmethodpost
defstaticFun():
print'static method'
@classmethodspa
defclassFun(cls):
print 'class method'blog
staticmethod和classmethod的相同点:it
1.均可以经过类或实例调用class
mt = MethodTest()变量
MethodTest.staticFun()object
mt.staticFun()static
MethodTest.classFun()word
mt.classFun()ssm
2.都没法访问实例成员
@staticmethod
defstaticFun():
print var2 //wrong
@classmethod
defclassFun(cls):
print var2 //wrong
staticmethod和classmethod的区别:
1.staticmethod无需参数,classmethod须要类变量做为参数传递(不是类的实例)
defclassFun(cls):
print 'class method' //cls做为类变量传递
2.classmethod能够访问类成员,staticmethod则不能够
@staticmethod
defstaticFun():
print var1 //wrong
@classmethod
defclassFun(cls): print cls.var1 //right