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