python類中函式呼叫要加self
阿新 • • 發佈:2019-02-05
物件呼叫方法時, 實際上是通過類呼叫的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,'未繫結的方法物件,需要傳遞一個例項') 。 大多數時候,我們都直接呼叫方法,所以一般不會注意到方法物件。但是如果開始寫通用的呼叫物件的程式碼時,需要特別仔細地注意未繫結方法,它們需要地傳一個例項引數。