国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python多重繼承的方法解析執(zhí)行順序?qū)嵗治?/h1>
2020-02-15 21:30:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了Python多重繼承的方法解析執(zhí)行順序。分享給大家供大家參考,具體如下:

任何實(shí)現(xiàn)多重繼承的語(yǔ)言都要處理潛在的命名沖突, 這種沖突由不相關(guān)的祖先類實(shí)現(xiàn)同名方法引起

class A:  def say(self):    print("A Hello:", self)class B(A):  def eat(self):    print("B Eating:", self)class C(A):  def eat(self):    print("C Eating:", self)class D(B, C):  def say(self):    super().say()    print("D Hello:", self)  def dinner(self):    self.say()    super().say()    self.eat()    super().eat()    C.eat(self)

這里B和C都實(shí)現(xiàn)了eat方法,

在 D 的實(shí)例上調(diào)用 d.eat() 方法的話, 運(yùn)行的是哪個(gè) eat 方法呢?

>>> d = D()>>> d.eat()B Eating: <__main__.D object at 0x7fb90c627f60>>>> C.eat(d)C Eating: <__main__.D object at 0x7fb90c627f60>

超類中的方法都可以直接調(diào)用, 此時(shí)要把實(shí)例作為顯式參數(shù)傳入

Python 能區(qū)分 d.eat() 調(diào)用的是哪個(gè)方法, 是因?yàn)?Python 會(huì)按照特定的順序遍歷繼承圖。 這個(gè)順序叫方法解析順序( Method Resolution Order, MRO)。 類都有一個(gè)名為 __mro__ 的屬性, 它的值是一個(gè)元組, 按照方法解析順序列出各個(gè)超類, 從當(dāng)前類一直向上, 直到object 類。 D 類的 __mro__ 屬性如下 :

>>> D.__mro__(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class 'object'>)>>> d = D()>>> d.dinner()A Hello: <__main__.D object at 0x7fb90bd7eb70>D Hello: <__main__.D object at 0x7fb90bd7eb70>A Hello: <__main__.D object at 0x7fb90bd7eb70>B Eating: <__main__.D object at 0x7fb90bd7eb70>B Eating: <__main__.D object at 0x7fb90bd7eb70>C Eating: <__main__.D object at 0x7fb90bd7eb70>

第一個(gè)self.say(),運(yùn)行A類的say()再print出自己的第二行信息
第二個(gè)super().say(),運(yùn)行A類的say()
第三個(gè)self.eat(),根據(jù) __mro__ , 找到的是 B 類實(shí)現(xiàn)的eat方法
第四個(gè)super().eat(),根據(jù) __mro__ , 找到的是 B 類實(shí)現(xiàn)的eat方法
第五個(gè)C.eat(self)忽略 mro , 找到的是 C 類實(shí)現(xiàn)的eat方法

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程》

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

主站蜘蛛池模板: 红河县| 客服| 泽普县| 连江县| 辽宁省| 旬阳县| 吉首市| 苏尼特左旗| 临江市| 梅河口市| 乌拉特中旗| 金平| 石泉县| 韶山市| 宜春市| 石棉县| 信丰县| 略阳县| 黎川县| 乡宁县| 双牌县| 沙田区| 颍上县| 汶川县| 西城区| 峨山| 镇江市| 安岳县| 宜昌市| 邹城市| 望城县| 茌平县| 温州市| 静宁县| 南澳县| 福海县| 达拉特旗| 越西县| 云龙县| 丽江市| 丽江市|