欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: av在线网站观看 | 魔法骑士在线观看免费完整版高清 | 天天操妹子 | 国产亚洲欧美另类第一页 | 久久88| 一级做a爰片性色毛片男小说 | 天堂成人 | 一区二区三区四区国产 | 久久综合色婷婷 | 日韩大片在线永久观看视频网站免费 | 国产在线精品一区二区三区 | 亚洲精品黄色 | 香蕉久久a毛片 | 国产一区二区三区久久久久久久久 | 国产日韩一区二区三区在线观看 | 亚洲欧美另类日韩 | 亚洲欧美在线视频免费 | 国产一级高清 | 亚洲 欧美精品 | 激情大乳女做爰办公室韩国 | 美国一级特色大黄 | 在线一区免费视频播放 | 最新的黄色网址 | 国产精品福利在线观看秒播 | 毛片无码免费无码播放 | 狠狠色狠狠色综合久久第一次 | 国产免费叼嘿在线观看 | 午夜私人影院粉色视频我要 | 毛片免费看电影 | 午夜视频在线观看免费视频 | 欧美大片一区 | 久久免费看少妇高潮A片特黄多 | 午夜在线观看免费视频 | 亚洲国产日产韩国欧美综合 | 日日摸天天碰中文字幕 | 中文字幕在线观看av | wwwwww日本 | av中文字幕在线 | 色qing网站| 国产亚洲99影院 | 日韩美女一区二区三区 |