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

2021-09-07 10:23:45 字數 1459 閱讀 4743

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

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

在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中的類方法和靜態方法

python中至少有三種比較常見的方法型別,即例項方法,類方法 靜態方法。它們是如何定義的呢?如何呼叫的呢?它們又有何區別和作用呢?首先,這三種方法都定義在類中。例項方法 定義 第乙個引數必須是例項物件,該引數名一般約定為 self 通過它來傳遞例項的屬性和方法 也可以傳類的屬性和方法 呼叫 只能由...