最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析python繼承與多重繼承

 更新時間:2018年09月13日 11:28:32   投稿:laozhang  
在本篇文章中我們給大家分析了python繼承與多重繼承的相關知識點內容,有興趣的讀者們參考下。

記住以下幾點:

直接子類化內置類型(如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 超類的方法都可以直接調用,此時要把實例作為顯示參數(shù)傳入.

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

>>> D.mro()

[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

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

以下是對于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()方法,根據(jù)__mro__,找到B類實現(xiàn)的pong方法. pong: <__main__.D object at 0x000002213877F2B0>

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

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

相關文章

  • TensorFlow教程Softmax邏輯回歸識別手寫數(shù)字MNIST數(shù)據(jù)集

    TensorFlow教程Softmax邏輯回歸識別手寫數(shù)字MNIST數(shù)據(jù)集

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡的TensorFlow教程基于Softmax邏輯回歸識別手寫數(shù)字的MNIST數(shù)據(jù)集示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 解決Django連接db遇到的問題

    解決Django連接db遇到的問題

    今天小編大家分享一篇解決Django連接db遇到的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python實現(xiàn)隨機加減法生成器

    python實現(xiàn)隨機加減法生成器

    這篇文章主要為大家詳細介紹了python實現(xiàn)隨機加減法生成器,練手小項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 最新評論

    禹城市| 鹤庆县| 仪陇县| 历史| 灯塔市| 浏阳市| 邵阳市| 大悟县| 揭西县| 鹤山市| 揭阳市| 万载县| 江都市| 荥阳市| 日照市| 蒙城县| 扬中市| 屏东市| 望城县| 逊克县| 镇安县| 宜都市| 象山县| 松桃| 宝兴县| 泗阳县| 北辰区| 德庆县| 瓦房店市| 东辽县| 道孚县| 大连市| 合江县| 康保县| 濉溪县| 龙陵县| 宣武区| 马鞍山市| 葵青区| 尖扎县| 磐石市|