真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python中super()的作用是什么-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),雨花企業(yè)網(wǎng)站建設(shè),雨花品牌網(wǎng)站建設(shè),網(wǎng)站定制,雨花網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,雨花網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

這篇文章主要介紹python中super()的作用是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

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

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

舉一個(gè)例子:

class Foo:
  def bar(self, message):
    print(message)
>>> Foo().bar("Hello, Python.")
Hello, Python.

當(dāng)存在繼承關(guān)系的時(shí)候,有時(shí)候需要在子類中調(diào)用父類的方法,此時(shí)最簡(jiǎn)單的方法是把對(duì)象調(diào)用轉(zhuǎn)換成類調(diào)用,需要注意的是這時(shí)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.

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

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é)果是一致的,實(shí)際上這兩種方法的內(nèi)部處理機(jī)制大大不同,當(dāng)涉及多繼承情況時(shí),就會(huì)表現(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機(jī)制里可以保證公共父類僅被執(zhí)行一次,至于執(zhí)行的順序,是按照MRO(Method Resolution Order):方法解析順序 進(jìn)行的。

以上是python中super()的作用是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!


新聞名稱:python中super()的作用是什么-創(chuàng)新互聯(lián)
文章鏈接:http://weahome.cn/article/cejcgd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部