欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

淺析python繼承與多重繼承

系統 1613 0

記住以下幾點:

直接子類化內置類型(如dict,list或str)容易出錯,因為內置類型的方法通常會忽略用戶覆蓋的方法,不要子類化內置類型,用戶自定義的類應該繼承collections模塊。

            
  def __setitem__(self, key, value):
    super().__setitem__(key, [value] * 2) # 錯誤案例
class AnswerDict(dict):
  def __getitem__(self, item): # 錯誤案例
    return 42
import collections
class DoppelDict2(collections.UserDict): # 正確案例
  def __setitem__(self, key, value):
    super().__setitem__(key, [value] * 2)
class AnswerDict2(collections.UserDict): # 正確案例
  def __getitem__(self, item):
    return 42
          

多重繼承有關的另一個問題就是:如果同級別的超類定義了同名屬性.Python如何確定使用哪個?

            
class DoppelDict(dict):
  def __setitem__(self, key, value):
    super().__setitem__(key, [value] * 2)
class AnswerDict(dict):
  def __getitem__(self, item):
    return 42
import collections
class DoppelDict2(collections.UserDict):
  def __setitem__(self, key, value):
    super().__setitem__(key, [value] * 2)
class AnswerDict2(collections.UserDict):
  def __getitem__(self, item):
    return 42
class A:
  def ping(self):
    print('Ping:', self)
class B(A):
  def pong(self):
    print('pong:', self)
class C(A):
  def pong(self):
    print('PONG:', self)
class D(B, C):
  def ping(self):
    super().ping()
    print('post-ping:', self)
  def pingpong(self):
    self.ping()
    super().ping()
    self.pong()
    super().pong()
    C.pong(self)
if __name__ == '__main__':
  d = D()
  print(d.pong()) # 輸出來源于B
  print(C.pong(d)) #輸出來源于C 超類的方法都可以直接調用,此時要把實例作為顯示參數傳入.
          

python能區別調用的是哪個方法,通過方法解析順序

>>> D.mro()

[ , , , , ]

若想把方法調用委托給超類,推薦的方式是使用內置的super()函數.

以下是對于d.pingpong()方法的解讀

>>> self.ping()

Ping: <__main__.D object at 0x000002213877F2B0> post-ping: <__main__.D object at 0x000002213877F2B0> 第一個調用的是self.ping(),運行的是是D類的ping,方法.

第二個調用的的是super().ping(),跳過D類的ping方法,找到A類的ping方法.Ping: <__main__.D object at 0x000002213877F2B0>

第三個調用的是self.pong()方法,根據__mro__,找到B類實現的pong方法. pong: <__main__.D object at 0x000002213877F2B0>

第四個調用時super().pong(),也是根據__mro__,找到B類實現的pong方法. pong: <__main__.D object at 0x000002213877F2B0>

第五個調用的是C.pong(self),忽略了__mro__,找到的是C類實現的pong方法. PONG: <__main__.D object at 0x000002213877F2B0>


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天操你| 久久久久久免费视频 | 国产成人精品一区二区仙踪林 | 国产精品久久久久久久久久久久 | 9999久久 | 日韩一级大毛片欧美一级 | 在线观看特色大片免费网站 | 欧美一区二区在线播放 | 2021国产成人午夜精品 | 亚洲午夜久久久精品影院 | 综合精品| 欧美一区二区黄色片 | 国产成人福利 | 午夜你懂得 | 色图综合网 | 成av在线 | 中文字幕精品一区二区三区精品 | 日韩欧美国产中文 | 国产亚洲美女精品久久久久 | 国产精品成人自拍 | 全黄裸片武则天一级第4季 亚洲一区国产 | 91高清免费 | 国产精品一区二 | 成人亚洲网站 | 学院传说之三生三世桃花缘 | 成人 日韩 在线 | 成人在线免费视频播放 | 成人看的一级毛片 | 亚洲午夜小视频 | Jizjizjizjiz日本护士水多 | 91嫩草精品 | 暖暖av| 免费看欧美成人性色生活片 | 五月婷婷天堂 | 国产精品视频在线播放 | 性强烈欧美一级毛片 | 久久国产精品免费一区二区三区 | 青娱乐欧美视频 | 欧美激情精品久久久久久黑人 | α片毛片 | 毛片啪啪啪 |