image.png
# coding=utf-8
class A(object):
def __init__(self, x=0):
self.x = x
#類實(shí)例方法 # 最常見(jiàn)的實(shí)例方法
def foo(self, y=0):
print self.x, y
#類方法 # cls即為類自身
@classmethod
def class_foo(cls, x=1, y=1):
return cls(x) # 因?yàn)轭惙椒梢詡鲄⒁粋€(gè)cls參數(shù)领曼,所以可以調(diào)用類的相關(guān)信息,而靜態(tài)方法是一個(gè)獨(dú)立的函數(shù)蛮穿,也是可以調(diào)用的庶骄,這里為了簡(jiǎn)單,沒(méi)有調(diào)用靜態(tài)方法
#靜態(tài)方法 # 不能傳遞和類或?qū)嵗嚓P(guān)的參數(shù)践磅,如cls或self单刁,但可以傳遞其他參數(shù)
@staticmethod
def static_foo(x=2):
return A(x)
所以邏輯上,類方法應(yīng)當(dāng)只被類調(diào)用府适,實(shí)例方法實(shí)例調(diào)用羔飞,靜態(tài)方法兩者都能調(diào)用肺樟。主要區(qū)別在于參數(shù)傳遞上的區(qū)別,實(shí)例方法悄悄傳遞的是self引用作為參數(shù)逻淌,而類方法悄悄傳遞的是cls引用作為參數(shù)么伯。