Pyhton 例項方法,類方法,靜態方法的區別

2021-08-08 10:51:28 字數 2231 閱讀 6651



有區別的,最主要的區別在於,定義類方法主要是要加乙個裝飾器,@classmethod

而例項方法沒有這個裝飾器。這是區別例項方法和類方法的最主要的區別。

在呼叫上的區別在於,例項方法要先例項化乙個物件再呼叫這個例項化方法,而類方法不需要有類的例項,直接類名.方法名就可以呼叫。

例項方法至少有乙個引數,通常用self,這個引數裡面是這個例項本身。類方法至少有乙個引數,通常用cls,這個引數裡面是這個類本身。

例項方法由於有例項,所以例項的屬性對其實可見的,但類方法顯然沒有屬性。

本質上來講,類方法和例項方法沒有本質區別,只不過在呼叫的時候,例項方法把這個例項本身當做引數傳過去了。

以下是示例**,感受一下。

class myclass:

@classmethod

def classmethod(cls):

print('class method')

print('parameter : %s'%cls)

pass

def instancemethod(self):

print('instance method')

print('parameter : %s' % self)

pass

m=myclass()

m.instancemethod()#例項來呼叫例項方法

myclass.classmethod()#類名.方法名呼叫類方法

myclass.instancemethod(m)#類名.方法名,並將例項作為引數傳入,和例項呼叫例項方法一樣

類方法和靜態方法的區別

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

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

在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實現了一定的靈活性使得類方法和靜態方法,都能夠被例項和類二者呼叫

例項方法 靜態方法 類方法

首先新建乙個日期date類,屬性為年,月,日,tomorrow 是例項方法,這個最常見,比較簡單,例項方法的第乙個引數是例項物件self 當我們傳入的年月日是2018 6 4這樣的形式,我們就需要先進行字串處理,在這裡使用了元組的拆包 這是最基本的方式,但是這樣寫會有乙個問題,每次傳參都需要進行字串...

類方法,例項方法,靜態方法

python 中的三種方法,有三種類方法,例項方法,靜態方法,這三種方法都在類中,區別在於呼叫的方式不同。例項物件能的呼叫這三種方法,類只能呼叫類方法和靜態方法。class foo object def init self,name self.name name deford func self 定...

例項方法 類方法 靜態方法

示例方法 第乙個引數為self,必須例項化之後才能呼叫的方法 類方法 使用 classmethod進行裝飾,第乙個引數為cls,可以被類呼叫,也可以被例項呼叫。靜態方法 使用 staticmethod進行裝飾,沒有固定的引數,可以被類呼叫,也可以被例項呼叫,一般可以說跟類和例項沒有關係。classa...