一、静态方法:staticmethod
1、在Python2.6中,通过一个类调取一个方法(未绑定方法,3.0中已经去掉了),必须手动传递一个实例才能调用。例如:
class Me:
def meth(self,x):
print(x)
X=Me()
X.meth(2) #正常调用,显示 2
Me.meth(X,2) #正常调用,第一个参数X为实例参数,显示2
Me.meth(5 ,2) #错误调用(3.0中正常显示2),需要第一参数为实例参数
解决办法:用staticmethod 静态方法,调用时不需要实例参数。
例如:
class Me:
def meth(self,x):
print(x)
meth=staticmethod(meth)
Me.meth(5,2) #显示2,在2.6中可以正常调用,不需要实例参数
2、在3.0中,用实例调用类方法,往往把实例传递给方法,作为第一参数,比如:
class Me:
def meth(x):
print(x)
obj=Me()
Me.meth(2) #显示2,3.0中,可以用类调用方法
obj.meth(2) #显示错误,需要1个参数,默认会把实例作为第一参数,结果有2个参数。
解决办法:用静态方法:staticmeth 这样就不会把实例传递给方法。例如:
class Me:
def meth(x):
print(x)
meth=staticmethod(meth)
obj=Me()
obj.meth(2) #显示2,obj实例参数不会传递给方法meth
二、类方法:classmethod
1、在3.0中,如果用类调用方法,类不会传递给方法作为第一参数,用实例调用会把实例传递给方法做为第一参数。
例如:
class Me:
def meth(cls,x):
print(cls,x)
obj=Me()
obj.meth(2) #显示<class '__main__.Me'> 2
Me.meth(2) #显示错误,缺少参数,需要2个参数。类不作为第一参数;
解决办法:类方法:classmethod 不管是用实例调用还是类调用,都把类作为第一参数传递给类方法例如:
class Me:
def meth(cls,x):
print(cls,x)
meth=classmethod(meth)
obj=Me()
obj.meth(2) #显示<class '__main__.Me'> 2
Me.meth(2) #显示<class '__main__.Me'> 2