面相物件程式設計中,類方法和靜態方法是經常用到的兩個術語。
邏輯上講:類方法是只能由類名呼叫;靜態方法可以由類名或物件名進行呼叫。
在c++中,靜態方法與類方法邏輯上是等價的,只有乙個概念,不會混淆。
而在python中,方法分為三類例項方法、類方法、靜態方法。**如下:
class test(object):可以看到,在python中,兩種方法的主要區別在於引數。例項方法隱含的引數為類例項self,而類方法隱含的引數為類本身cls。def instancefun(self):
print("instancefun");
print(self);
@classmethod
def classfun(cls):
print("classfun");
print(cls);
@staticmethod
def staticfun():
print("staticfun");
t = test();
t.instancefun(); # 輸出instancefun,列印物件記憶體位址「<__main__.test object at 0x0293dcf0>」
test.classfun(); # 輸出classfun,列印類位置
test.staticfun(); # 輸出staticfun
t.staticfun(); # 輸出staticfun
t.classfun(); # 輸出classfun,列印類位置
test.instancefun(); # 錯誤,typeerror: unbound method instancefun() must be called with test instance as first argument
test.instancefun(t); # 輸出instancefun,列印物件記憶體位址「<__main__.test object at 0x0293dcf0>」
t.classfun(test); # 錯誤 classfun() takes exactly 1 argument (2 given)
靜態方法無隱含引數,主要為了類例項也可以直接呼叫靜態方法。
所以邏輯上類方法應當只被類呼叫,例項方法例項呼叫,靜態方法兩者都能呼叫。主要區別在於引數傳遞上的區別,例項方法悄悄傳遞的是self引用作為引數,而類方法悄悄傳遞的是cls引用作為引數。
python實現了一定的靈活性使得類方法和靜態方法,都能夠被例項和類二者呼叫
Python中類方法和靜態方法
要在類中使用靜態方法,需在靜態方法前面加上 staticmethod標記符,以表示下面的成員函式是靜態函式。使用靜態方法的好處 其函式不需要self引數,可以通過類呼叫該方法,不需要定義該類例項 當然通過類例項呼叫也沒有問題 類方法可以通過類或它的例項來呼叫,但 該方法的 第乙個引數cls是定義該方...
Python中的類方法和靜態方法
1.類方法 是類物件所擁有的方法,需要用修飾器 classmethod來標識其為類方法,對於類方法,第乙個引數必須是類物件,一般以cls作為第乙個引數 當然可以用其他名稱的變數作為其第乙個引數,但是大部分人都習慣以 cls 作為第乙個引數的名字,就最好用 cls 了 能夠通過例項物件和類物件去訪問。...
python中的類方法和靜態方法
python中至少有三種比較常見的方法型別,即例項方法,類方法 靜態方法。它們是如何定義的呢?如何呼叫的呢?它們又有何區別和作用呢?首先,這三種方法都定義在類中。例項方法 定義 第乙個引數必須是例項物件,該引數名一般約定為 self 通過它來傳遞例項的屬性和方法 也可以傳類的屬性和方法 呼叫 只能由...