python類中函式呼叫要加self

2021-06-26 08:24:02 字數 994 閱讀 9117

物件呼叫方法時, 實際上是通過類呼叫的a = muffedcalculator()a.calc(expr)

實際上是這樣呼叫的 muffledcalculator.calc(a, expr)這樣self 就是 a, python隱含地把a 傳進方法 替代了self, 就成了繫結的方法, 就可以執行了. 否則就是非繫結方法

像函式一樣,python中的類方法也是一種物件。由於既可以通過例項也可以通過類來訪問方法,所以在python裡有兩種風格:

未繫結的類方法:沒有self

通過類來引用方法返回乙個未繫結方法物件。要呼叫它,你必須顯示地提供乙個例項作為第乙個引數。

繫結的例項方法:有self

通過例項訪問方法返回乙個繫結的方法物件。python自動地給方法繫結乙個例項,所以我們呼叫它時不用再傳乙個例項引數。

兩種方法都是物件,它們可以被傳遞、存入列表等待。兩者執行時都需要乙個例項作為第一引數(妤乙個self值),但當通過乙個例項呼叫乙個繫結方法時python自動會提供乙個。例如我們執行如下的**:

class test:

def func(self,message):

print message

object1=test()

x=object1.func

x('繫結方法物件,例項是隱含的')

t=test.func

t(object1,'未繫結的方法物件,需要傳遞乙個例項') 

#t('未繫結的方法物件,需要傳遞乙個例項') #錯誤的呼叫

object1=test()生成乙個例項,object1.func返回乙個繫結的方法,把例項object1和方法func繫結。

而test.func是用類去引用方法,我們得到乙個未繫結的方法物件。要呼叫它就得傳乙個例項引數,如t(object1,'未繫結的方法物件,需要傳遞乙個例項') 。

大多數時候,我們都直接呼叫方法,所以一般不會注意到方法物件。但是如果開始寫通用的呼叫物件的**時,需要特別仔細地注意未繫結方法,它們需要地傳乙個例項引數。

C 呼叫C中編譯過的函式要加extern C

c 語言支援函式過載,c語言不支援函式過載。函式被c 編譯後在庫中的名字與c語言的不同。假設某個c 函式的宣告如下 void foo int x,int y 該函式被c 編譯器編譯後在庫中的名字為 foo,而c 編譯器則會產生像 foo int int之類的名字用來支援函式過載和型別安全連線。由於編...

Python類中的方法要加self的理由

python的類的方法和普通的函式有乙個很明顯的區別,在類的方法必須有個額外的第乙個引數 self 但在呼叫這個方法的時候不必為這個引數賦值 顯勝於隱 的引發 python的類的方法的這個特別的引數指代的是物件本身,而按照python的慣例,它用self來表示。當然我們也可以用其他任何名稱來代替,只...

python類呼叫方法 在Python類中呼叫方法

您尚未建立上述類的物件。類中的任何函式 方法都只能由該類的物件訪問。有關物件導向程式設計基礎的詳細資訊,請檢視this頁。同時,要使其生效,請按以下方式定義類 class time def init self,x none,y none,z none self.hour x self.minute ...