欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 欧美亚洲一区二区三区 | 91av大片| 亚洲色片网站 | 在线播放三级 | 亚洲色欲色欲www | 欧美14一18处毛片 | 天天天天做夜夜夜夜做 | 激情男女视频 | 丝袜诱惑一区二区 | 午夜视频在线免费观看 | 亚洲五月综合网色九月色 | 奇米色在线 | 狠狠干网| 91热视频在线观看 | aiai888永久免费视频 | 欧美日韩久久久 | 日韩精品第一页 | 先锋资源中文字幕 | 高清一区二区亚洲欧美日韩 | 精品久久久久久亚洲综合网 | 中文字幕日韩亚洲 | 亚洲免费在线看 | 成人福利在线视频免费观看 | 亚洲综合区| 日本国产最新一区二区三区 | 九一免费在线观看 | 免费A片线观看成人在-杏TV | 91麻豆蜜桃一区二区三区 | av在线网站观看 | 久久视频这里只要精品 | 色呦呦在线观看视频 | 国产99久久亚洲综合精品 | 日韩精品区| 日韩视频在线播放 | 久久一日本道色综合久久 | 天天躁日日躁狠狠躁中文字幕 | 国产成人综合在线观看网站 | 女人被男人狂躁下面在线观看 | 91看片免费在线观看 | 一级片免费在线播放 | 欧美精品一区二区三区在线 |