python中類方法和靜態方法區別

2021-09-13 17:15:39 字數 1333 閱讀 8170

面相物件程式設計中,類方法和靜態方法是經常用到的兩個術語。

邏輯上講:類方法是只能由類名呼叫;靜態方法可以由類名或物件名進行呼叫。

在c++中,靜態方法與類方法邏輯上是等價的,只有乙個概念,不會混淆。

而在python中,方法分為三類例項方法、類方法、靜態方法。**如下:

class test(object):

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)

可以看到,在python中,兩種方法的主要區別在於引數。例項方法隱含的引數為類例項self,而類方法隱含的引數為類本身cls。

靜態方法無隱含引數,主要為了類例項也可以直接呼叫靜態方法。

所以邏輯上類方法應當只被類呼叫,例項方法例項呼叫,靜態方法兩者都能呼叫。主要區別在於引數傳遞上的區別,例項方法悄悄傳遞的是self引用作為引數,而類方法悄悄傳遞的是cls引用作為引數。

python實現了一定的靈活性使得類方法和靜態方法,都能夠被例項和類二者呼叫

Python中類方法和靜態方法

要在類中使用靜態方法,需在靜態方法前面加上 staticmethod標記符,以表示下面的成員函式是靜態函式。使用靜態方法的好處 其函式不需要self引數,可以通過類呼叫該方法,不需要定義該類例項 當然通過類例項呼叫也沒有問題 類方法可以通過類或它的例項來呼叫,但 該方法的 第乙個引數cls是定義該方...

Python中的類方法和靜態方法

1.類方法 是類物件所擁有的方法,需要用修飾器 classmethod來標識其為類方法,對於類方法,第乙個引數必須是類物件,一般以cls作為第乙個引數 當然可以用其他名稱的變數作為其第乙個引數,但是大部分人都習慣以 cls 作為第乙個引數的名字,就最好用 cls 了 能夠通過例項物件和類物件去訪問。...

python中,類方法和靜態方法區別。

面相物件程式設計中,類方法和靜態方法是經常用到的兩個術語。邏輯上講 類方法是只能由類名呼叫 靜態方法可以由類名或物件名進行呼叫。在c 中,靜態方法與類方法邏輯上是等價的,只有乙個概念,不會混淆。而在python中,方法分為三類例項方法 類方法 靜態方法。如下 class test object de...