有區別的,最主要的區別在於,定義類方法主要是要加乙個裝飾器,@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...