最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解python的super()的作用和原理

 更新時間:2020年10月29日 09:07:16   作者:silencement  
這篇文章主要介紹了python的super()的作用和原理,super(), 在類的繼承里面super()非常常用, 它解決了子類調用父類方法的一些問題, 父類多次被調用時只執(zhí)行一次, 優(yōu)化了執(zhí)行邏輯,下面我們就來詳細看一下

Python中對象方法的定義很怪異,第一個參數(shù)一般都命名為self(相當于其它語言的this),用于傳遞對象本身,而在調用的時候則不必顯式傳遞,系統(tǒng)會自動傳遞。

今天我們介紹的主角是super(), 在類的繼承里面super()非常常用, 它解決了子類調用父類方法的一些問題, 父類多次被調用時只執(zhí)行一次, 優(yōu)化了執(zhí)行邏輯,下面我們就來詳細看一下。

舉一個例子:

class Foo:

  def bar(self, message):

    print(message)
>>> Foo().bar("Hello, Python.")

Hello, Python.

當存在繼承關系的時候,有時候需要在子類中調用父類的方法,此時最簡單的方法是把對象調用轉換成類調用,需要注意的是這時self參數(shù)需要顯式傳遞,例如:

class FooParent:

  def bar(self, message):

    print(message)

class FooChild(FooParent):

  def bar(self, message):

    FooParent.bar(self, message)
>>> FooChild().bar("Hello, Python.")

Hello, Python.

這樣做有一些缺點,比如說如果修改了父類名稱,那么在子類中會涉及多處修改,另外,Python是允許多繼承的語言,如上所示的方法在多繼承時就需要重復寫多次,顯得累贅。為了解決這些問題,Python引入了super()機制,例子代碼如下:

class FooParent:

  def bar(self, message):

    print(message)

class FooChild(FooParent):

  def bar(self, message):

    super(FooChild, self).bar(message)
>>> FooChild().bar("Hello, Python.")

Hello, Python.

表面上看 super(FooChild, self).bar(message)方法和FooParent.bar(self, message)方法的結果是一致的,實際上這兩種方法的內部處理機制大大不同,當涉及多繼承情況時,就會表現(xiàn)出明顯的差異來,直接給例子:

代碼一

class A:

  def __init__(self):

    print("Enter A")

    print("Leave A")

class B(A):

  def __init__(self):

    print("Enter B")

    A.__init__(self)

    print("Leave B")

class C(A):

  def __init__(self):

    print("Enter C")

    A.__init__(self)

    print("Leave C")

class D(A):

  def __init__(self):

    print("Enter D")

    A.__init__(self)

    print("Leave D")

class E(B, C, D):

  def __init__(self):

    print("Enter E")

    B.__init__(self)

    C.__init__(self)

    D.__init__(self)

    print("Leave E")

E()

輸出結果

Enter E

Enter B

Enter A

Leave A

Leave B

Enter C

Enter A

Leave A

Leave C

Enter D

Enter A

Leave A

Leave D

Leave E

執(zhí)行順序很好理解,唯一需要注意的是公共父類A被執(zhí)行了多次。

代碼二

class A:

  def __init__(self):

    print("Enter A")

    print("Leave A")

class B(A):

  def __init__(self):

    print("Enter B")

    super(B, self).__init__()

    print("Leave B")

class C(A):

  def __init__(self):

    print("Enter C")

    super(C, self).__init__()

    print("Leave C")

class D(A):

  def __init__(self):

    print("Enter D")

    super(D, self).__init__()

    print("Leave D")

class E(B, C, D):

  def __init__(self):

    print("Enter E")

    super(E, self).__init__()

    print("Leave E")

E()

輸出結果

Enter E

Enter B

Enter C

Enter D

Enter A

Leave A

Leave D

Leave C

Leave B

Leave E

在super機制里可以保證公共父類僅被執(zhí)行一次,至于執(zhí)行的順序,是按照MRO(Method Resolution Order):方法解析順序 進行的。

以上就是詳解python的super()的作用和原理的詳細內容,更多關于python super()的資料請關注腳本之家其它相關文章!

相關文章

  • Python的Flask框架與數(shù)據(jù)庫連接的教程

    Python的Flask框架與數(shù)據(jù)庫連接的教程

    這篇文章主要介紹了Python的Flask框架與數(shù)據(jù)庫連接的教程,是Flask框架學習當中的基本知識,需要的朋友可以參考下
    2015-04-04
  • OpenCV視頻流Python多線程處理方法詳細分析

    OpenCV視頻流Python多線程處理方法詳細分析

    為OpenCV是搞計算機視覺必須要掌握的基礎,這篇文章主要給大家介紹了關于OpenCV視頻流多線程處理的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Python使用xpath對解析內容進行數(shù)據(jù)提取

    Python使用xpath對解析內容進行數(shù)據(jù)提取

    XPath 使用路徑表達式來選取HTML/ XML 文檔中的節(jié)點或節(jié)點集,節(jié)點是通過沿著路徑 (path) 或者步 (steps) 來選取的,本文將給大家介紹Python使用xpath對解析內容進行數(shù)據(jù)提取的方法,需要的朋友可以參考下
    2024-05-05
  • Django 實現(xiàn)外鍵去除自動添加的后綴‘_id’

    Django 實現(xiàn)外鍵去除自動添加的后綴‘_id’

    今天小編就為大家分享一篇Django 實現(xiàn)外鍵去除自動添加的后綴‘_id’,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 使用python-Jenkins批量創(chuàng)建及修改jobs操作

    使用python-Jenkins批量創(chuàng)建及修改jobs操作

    這篇文章主要介紹了使用python-Jenkins批量創(chuàng)建及修改jobs操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python實現(xiàn)時鐘顯示效果思路詳解

    Python實現(xiàn)時鐘顯示效果思路詳解

    這篇文章主要介紹了Python實現(xiàn)時鐘顯示,需要的朋友可以參考下
    2018-04-04
  • Python機器學習入門(一)序章

    Python機器學習入門(一)序章

    這篇文章主要介紹了Python機器學習入門知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Python數(shù)據(jù)結構之遞歸可視化詳解

    Python數(shù)據(jù)結構之遞歸可視化詳解

    遞歸函數(shù)是直接調用自己或通過一系列語句間接調用自己的函數(shù)。遞歸在程序設計有著舉足輕重的作用,在很多情況下,借助遞歸可以優(yōu)雅的解決問題。本文主要介紹了如何利用可視化方式來了解遞歸函數(shù)的執(zhí)行步驟,需要的可以參考一下
    2022-04-04
  • Python3 ID3決策樹判斷申請貸款是否成功的實現(xiàn)代碼

    Python3 ID3決策樹判斷申請貸款是否成功的實現(xiàn)代碼

    這篇文章主要介紹了Python3 ID3決策樹判斷申請貸款是否成功的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • PyTorch使用自動微分模塊的方法和理解

    PyTorch使用自動微分模塊的方法和理解

    自動微分模塊Autograd為張量增加了自動求導功能,是神經網絡訓練不可或缺的組成部分,通過backward方法和grad屬性,實現(xiàn)梯度的計算和訪問,本小節(jié)主要講解了 PyTorch 中非常重要的自動微分模塊的使用和理解,感興趣的朋友一起看看吧
    2024-09-09

最新評論

和硕县| 马龙县| 泊头市| 吉安县| 比如县| 扬中市| 东方市| 晋州市| 揭西县| 宜兰县| 耿马| 健康| 太和县| 安吉县| 钟山县| 新丰县| 四会市| 康乐县| 宁都县| 温泉县| 延寿县| 延津县| 安龙县| 凤翔县| 本溪市| 洛南县| 富锦市| 鹰潭市| 郁南县| 大关县| 阿图什市| 通海县| 安泽县| 固阳县| 衡南县| 简阳市| 府谷县| 鹿邑县| 白朗县| 安乡县| 黑龙江省|