python呼叫類函式為什麼不能一步呼叫?

時間 2021-06-02 06:24:57

1樓:王加加

因為你定義的是物件的函式而不是類的函式。預設定義的是物件的函式,必須例項化後才能使用。這也是為什麼函式第乙個引數要傳入self,因為self是類例項化後得到的指向自己變數(類似於C++中的this指標)。

如果不是例項化的物件,函式就沒法得到self引數。

要想直接呼叫,有三種方法。

一種方法,呼叫的時候初始化物件。但是這種方法每次要建立新物件。如果你要多次呼叫,有點浪費資源。t3=

ReadConfig().

get_email

('mail_host'

)第二種方法,將get_email()設計為類函式:

class

ReadConfig

:@classmethod

defget_email

(cls

,name

):# do something

ReadConfig

.get_email

('mail_host'

)第三種方法,將get_email()設計為靜態函式:

class

ReadConfig

:@staticmethod

defget_email

(name

):# do something

ReadConfig

.get_email

('mail_host'

)ReadConfig().

get_email

('mail_host'

)注意到其中的區別。第一種方法,你之前定義的函式是屬於具體物件的,需要例項化之後才能使用。第二種方法,修飾符 @classmethod 則表明這個函式屬於類的函式,可以直接指定類名來呼叫(注意第乙個引數cls代表了類自己)。

第三種方法,修飾符 @staticmethod 表明這是個靜態函式,這個函式既可以在類中呼叫,也可以在例項化後的物件中呼叫。

2樓:凌心誠

因為例項方法需要例項才能呼叫。類去呼叫自己例項的方法時,你就要傳乙個此類的例項進去。也就是那個self引數所在的位置。記住必須是此類的例項,比如

class A:

def f(self,x):

pass

a=A()

A.f(a,x)

這樣是可以通過類去呼叫例項方法的,但你不覺得這樣呼叫毫無用處,純屬虛華俗麗麼?

3樓:黃哥

報錯資訊清楚明白,呼叫get_email方法時少傳了乙個位置引數name。

get_mail 方法你設計成例項方法,類不能直接呼叫。

類直接呼叫例項方法,需要這樣,但不推薦這樣寫,要不設計成類方法或靜態方法。

或者直接用例項呼叫例項方法。請參考樓下的回答。

為什麼 Python 3 中類可以直接呼叫例項方法,Python 2 中卻不行?

Manjusaka 靈劍 老大已經說了 3.0 移除了 unbound method 的概念,直接呼叫函式就被當做乙個普通函式處理 詳情參見 What s New In Python 3.0 曲奇 確實和直譯器的實現有關係。但我建議不要在這個方向上深究,鑽牛角尖無助於提公升程式設計功力。Python...

Python多繼承用super呼叫父類方法?

python的super傳遞 python多重繼承的super呼叫父類的兄弟類 30天嘗試新事情 如果要呼叫父類的父類,可以直接用類名 類名需要在mro裡面 多重繼承 class A def init selfprint A init print self def fun selfprint A s...

(JavaScript)為什麼無法呼叫函式內的函式?

已登出 new的作用是建立乙個物件,然後把這個物件作為thisArg傳遞給被呼叫的函式,然後把這個物件作為返回值返回。所以v new f 大致上 並不完全 可以看作 f.call v 那麼v的值是什麼呢?那麼v或其原型鏈上是否具有f1呢?沒有。以上。 建議學習 原型鏈 v.f是undefined。v...