国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

5分鐘了解 Python 中的super函數(shù)是如何實現(xiàn)繼承的

psychola / 2356人閱讀

摘要:和中有一個很大的區(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

相關文章

  • Python標準庫---6、內(nèi)置函數(shù)(P-K-R-S-T-U)

    摘要:上一篇文章標準庫內(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://...

    lastSeries 評論0 收藏0
  • ES6,你不得不學!

    摘要:但是,的本質仍然是函數(shù),是構造函數(shù)的另外一種寫法。報錯原生構造函數(shù)的繼承對于一些原生的構造函數(shù),比如,,,等,在是無法通過方法實現(xiàn)原生函數(shù)的內(nèi)部屬性,原生函數(shù)內(nèi)部的無法綁定,內(nèi)部屬性獲得不了。 在沒有學習 ES6 之前,學習 React,真的是一件非常痛苦的事情。即使之前你對 ES5 有著很好的基礎,包括閉包、函數(shù)、原型鏈和繼承,但是 React 中已經(jīng)普遍使用 ES6 的語法,包括 ...

    CKJOKER 評論0 收藏0
  • 30分鐘掌握ES6/ES2015核心內(nèi)容(上)

    摘要:以下簡稱是語言的下一代標準。的繼承機制,實質是先創(chuàng)造父類的實例對象所以必須先調(diào)用方法,然后再用子類的構造函數(shù)修改。總結以上就是最常用的一些語法,可以說這的語法,在的日常使用中占了追加十分鐘好的嗎分鐘掌握核心內(nèi)容下 ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。因為當前版本的ES6是在2015年發(fā)布的,所以又稱ECMAScript 2015。 也就是說...

    YPHP 評論0 收藏0
  • 廣州三本找Java實習經(jīng)歷

    摘要:廣州三本大三在讀,在廣州找實習。這篇文章其實主要是記錄一下自己的面試經(jīng)歷,希望大家看完之后能有所了解進入中小公司究竟需要什么水平。時間復雜度盡量低一些使用快排的,將給出的隨機數(shù)做基準值返回的坐標就是了。 前言 只有光頭才能變強 這陣子跑去面試Java實習生啦~~~我來簡單介紹一下背景吧。 廣州三本大三在讀,在廣州找實習。大學開始接觸編程,一個非常平庸的人。 在學習編程時,跟我類似的人應...

    enali 評論0 收藏0
  • 30分鐘掌握ES6/ES2015核心內(nèi)容

    摘要:以下簡稱是語言的下一代標準。因為當前版本的是在年發(fā)布的,所以又稱。用它所聲明的變量,只在命令所在的代碼塊內(nèi)有效。的繼承機制,實質是先創(chuàng)造父類的實例對象所以必須先調(diào)用方法,然后再用子類的構造函數(shù)修改。 ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準。因為當前版本的ES6是在2015年發(fā)布的,所以又稱ECMAScript 2015。 也就是說,ES6就是E...

    LucasTwilight 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<