摘要:和中有一個很大的區(qū)別就是類,無論是類的定義還是類的繼承。中類的繼承可以直接使用關鍵字代替原來的。中注釋掉了函數(shù),所以并沒有向后繼續(xù)執(zhí)行。如果中仍然有函數(shù)則會繼續(xù)向上去查找中是否有函數(shù)。
Py 2.x 和 Py 3.x 中有一個很大的區(qū)別就是類,無論是類的定義還是類的繼承。Py 3.x 中類的繼承可以直接使用 super() 關鍵字代替原來的 super(Class, self)。
那么 super() 到底是依據(jù)什么來繼承的呢?今天就來分析下。
super()函數(shù)根據(jù)傳進去的兩個參數(shù)具體作用如下:
通過第一參數(shù)傳進去的類名確定當前在MRO中的哪個位置。MRO(Method Resolution Order);
通過第二個參數(shù)傳進去的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()函數(shù)時,實際調(diào)用了A類下的name函數(shù)。A中注釋掉了super()函數(shù),所以并沒有向后繼續(xù)執(zhí)行。并且打印出了當前MRO列表順序為C,A,B,object.
(, , , )name is wangname is xiaoming
當我們把A類中的注釋去掉后,執(zhí)行代碼輸出:可以看到,當A執(zhí)行后繼續(xù)執(zhí)行了B中的name()函數(shù)。如果B中仍然有super函數(shù)則會繼續(xù)向上去查找object中是否有name()函數(shù)。
(, , , )name is wangname is xiaomingname is cat
關注公眾號:「Python專欄」,后臺回復「騰訊架構資源1」,獲取由騰訊架構師整理的大數(shù)據(jù)學習資源包全套!!!
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43287.html
摘要:上一篇文章標準庫內(nèi)置函數(shù)下一篇文章標準庫內(nèi)置函數(shù)內(nèi)置函數(shù)返回一個新的對象,可以選擇帶有從獲取的元素。推薦使用內(nèi)置函數(shù)來檢測對象的類型,因為它會考慮子類的情況。上一篇文章標準庫內(nèi)置函數(shù)下一篇文章標準庫內(nèi)置函數(shù) 上一篇文章:Python標準庫---5、內(nèi)置函數(shù)(P-K-R)下一篇文章:Python標準庫---7、內(nèi)置函數(shù)(V-W-X-Y-Z) 內(nèi)置函數(shù): showImg(https://...
摘要:但是,的本質仍然是函數(shù),是構造函數(shù)的另外一種寫法。報錯原生構造函數(shù)的繼承對于一些原生的構造函數(shù),比如,,,等,在是無法通過方法實現(xiàn)原生函數(shù)的內(nèi)部屬性,原生函數(shù)內(nèi)部的無法綁定,內(nèi)部屬性獲得不了。 在沒有學習 ES6 之前,學習 React,真的是一件非常痛苦的事情。即使之前你對 ES5 有著很好的基礎,包括閉包、函數(shù)、原型鏈和繼承,但是 React 中已經(jīng)普遍使用 ES6 的語法,包括 ...
摘要:以下簡稱是語言的下一代標準。的繼承機制,實質是先創(chuàng)造父類的實例對象所以必須先調(diào)用方法,然后再用子類的構造函數(shù)修改。總結以上就是最常用的一些語法,可以說這的語法,在的日常使用中占了追加十分鐘好的嗎分鐘掌握核心內(nèi)容下 ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。因為當前版本的ES6是在2015年發(fā)布的,所以又稱ECMAScript 2015。 也就是說...
摘要:廣州三本大三在讀,在廣州找實習。這篇文章其實主要是記錄一下自己的面試經(jīng)歷,希望大家看完之后能有所了解進入中小公司究竟需要什么水平。時間復雜度盡量低一些使用快排的,將給出的隨機數(shù)做基準值返回的坐標就是了。 前言 只有光頭才能變強 這陣子跑去面試Java實習生啦~~~我來簡單介紹一下背景吧。 廣州三本大三在讀,在廣州找實習。大學開始接觸編程,一個非常平庸的人。 在學習編程時,跟我類似的人應...
摘要:以下簡稱是語言的下一代標準。因為當前版本的是在年發(fā)布的,所以又稱。用它所聲明的變量,只在命令所在的代碼塊內(nèi)有效。的繼承機制,實質是先創(chuàng)造父類的實例對象所以必須先調(diào)用方法,然后再用子類的構造函數(shù)修改。 ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。因為當前版本的ES6是在2015年發(fā)布的,所以又稱ECMAScript 2015。 也就是說,ES6就是E...
閱讀 1191·2021-11-24 09:38
閱讀 2600·2021-09-27 14:00
閱讀 1160·2019-08-30 15:55
閱讀 1333·2019-08-30 14:16
閱讀 1488·2019-08-30 10:54
閱讀 2862·2019-08-28 17:58
閱讀 757·2019-08-26 13:22
閱讀 1229·2019-08-26 12:01