摘要:確定當前列表返回下一個類如下代碼執(zhí)行以上代碼輸出當執(zhí)行類下的函數時,實際調用了類下的函數。中注釋掉了函數,所以并沒有向后繼續(xù)執(zhí)行。如果中仍然有函數則會繼續(xù)向上去查找中是否有函數。
super()函數根據傳進去的兩個參數具體作用如下:
通過第一參數傳進去的類名確定當前在MRO中的哪個位置。MRO(Method Resolution Order);
通過第二個參數傳進去的self,確定當前的MRO列表。
def super(cls, inst): mro = inst.__class__.mro() #確定當前MRO列表 return mro[mro.index(cls) + 1] #返回下一個類
如下代碼:
class A(object): def name(self): print("name is xiaoming") #super(A,self).name() class B(object): def name(self): print("name is cat") class C(A,B): def name(self): print("name is wang") super(C,self).name() if __name__ == "__main__": c = C() print(c.__class__.__mro__) c.name()
執(zhí)行以上代碼輸出:當執(zhí)行C類下的super()函數時,實際調用了A類下的name函數。A中注釋掉了super()函數,所以并沒有向后繼續(xù)執(zhí)行。并且打印出了當前MRO列表順序為C,A,B,object.
(, , , ) name is wang name is xiaoming
當我們把A類中的注釋去掉后,執(zhí)行代碼輸出:可以看到,當A執(zhí)行后繼續(xù)執(zhí)行了B中的name()函數。如果B中仍然有super函數則會繼續(xù)向上去查找object中是否有name()函數。
(, , , ) name is wang name is xiaoming name is cat
參考鏈接
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38311.html
摘要:今天我們介紹的主角是在類的繼承里面非常常用,它解決了子類調用父類方法的一些問題,父類多次被調用時只執(zhí)行一次,優(yōu)化了執(zhí)行邏輯,下面我們就來詳細看一下。 1 談談你對面向對象的理解? 面向對象的編程---object oriented programming,簡稱:OOP,是一種編程的思想。OOP把對象當成一個程序的基本單元,一個對象包含了數據和操作數據的函數。面向對象的出現極大的提高了編...
摘要:整個過程還是比較清晰的,關鍵是要理解的工作方式,而不是想當然地認為調用了父類的方法。小結事實上,和父類沒有實質性的關聯(lián)。 super() 的入門使用 在類的繼承中,如果重定義某個方法,該方法會覆蓋父類的同名方法,但有時,我們希望能同時實現父類的功能,這時,我們就需要調用父類的方法了,可通過使用 super 來實現,比如: class Animal(object): def __...
摘要:時代,如果需要手動繼承,如多態(tài)多態(tài)是指,不同的子類對象調用相同的父類方法,會產生多態(tài)多樣結果的編程特性。 參考:黑馬程序員教程 - Python基礎 面向對象 OOP三大特性,且三個特性是有順序的: 封裝 繼承 多態(tài) 封裝 指的就是把現實世界的事務,封裝、抽象成編程里的對象,包括各種屬性和方法。這個一般都很簡單,不需要多講。 唯一要注意的就是:推薦從小往大開始封裝、開發(fā)類。比如手槍...
摘要:我們的小明,就這樣被一次次的往上傳導到了每一級的函數中,于是每一級打印的都是或者說小明傻傻的分割線更新之前的說法并不準確,參見和準確的說 super 的工作原理如下: def super(cls, inst): mro = inst.__class__.mro() return mro[mro.index(cls) + 1] 其中,cls 代表類,inst 代表實例,...
摘要:本文重點不要試圖在內置類型的子類中重寫方法,可以繼承的可拓展類尋求變通掌握多重繼承中的和了解處理多重繼承的一些建議。子類化的代碼如下輸出小結上述問題只發(fā)生在語言實現的內置類型子類化情況中,而且只影響直接繼承內置類型的自定義類。 導語:本文章記錄了本人在學習Python基礎之面向對象篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、不要試圖在內置...
閱讀 1607·2021-11-23 09:51
閱讀 1178·2019-08-30 13:57
閱讀 2257·2019-08-29 13:12
閱讀 2011·2019-08-26 13:57
閱讀 1193·2019-08-26 11:32
閱讀 978·2019-08-23 15:08
閱讀 699·2019-08-23 14:42
閱讀 3079·2019-08-23 11:41