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

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

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

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

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

舉一個例子:

class Foo:

  def bar(self, message):

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

Hello, Python.

當(dāng)存在繼承關(guān)系的時候,有時候需要在子類中調(diào)用父類的方法,此時最簡單的方法是把對象調(diào)用轉(zhuǎn)換成類調(diào)用,需要注意的是這時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是允許多繼承的語言,如上所示的方法在多繼承時就需要重復(fù)寫多次,顯得累贅。為了解決這些問題,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)方法的結(jié)果是一致的,實際上這兩種方法的內(nèi)部處理機制大大不同,當(dāng)涉及多繼承情況時,就會表現(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()

輸出結(jié)果

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()

輸出結(jié)果

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()的作用和原理的詳細內(nèi)容,更多關(guān)于python super()的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

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

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

    XPath 使用路徑表達式來選取HTML/ XML 文檔中的節(jié)點或節(jié)點集,節(jié)點是通過沿著路徑 (path) 或者步 (steps) 來選取的,本文將給大家介紹Python使用xpath對解析內(nèi)容進行數(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機器學(xué)習(xí)入門(一)序章

    Python機器學(xué)習(xí)入門(一)序章

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

    Python數(shù)據(jù)結(jié)構(gòu)之遞歸可視化詳解

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

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

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

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

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

最新評論

博罗县| 麦盖提县| 曲沃县| 富裕县| 孝感市| 安岳县| 富阳市| 莱州市| 寻乌县| 蕲春县| 苍山县| 遂川县| 商河县| 瓦房店市| 门源| 卓尼县| 西宁市| 孝感市| 司法| 靖州| 余庆县| 兰西县| 右玉县| 贵州省| 建宁县| 深水埗区| 绵阳市| 昔阳县| 自贡市| 财经| 云南省| 金门县| 拉孜县| 祁门县| 循化| 尚义县| 台前县| 乌什县| 漯河市| 易门县| 堆龙德庆县|