麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Python > 正文

Python高級編程之繼承問題詳解(super與mro)

2024-09-09 19:02:32
字體:
來源:轉載
供稿:網友

本文實例講述了Python高級編程之繼承問題。分享給大家供大家參考,具體如下:

多繼承問題

1.單獨調用父類:

一個子類同時繼承自多個父類,又稱菱形繼承、鉆石繼承。

使用父類名.init(self)方式調用父類時:

例:

class Parent(object):  def __init__(self, name):    self.name = name    print('parent的init結束被調用')class Son1(Parent):  def __init__(self, name, age):    Parent.__init__(self, name)    self.age = age    print('Son1的init結束被調用')class Son2(Parent):  def __init__(self, name, gender):    Parent.__init__(self, name)    self.gender = gender    print('Son2的init結束被調用')class Grandson(Son1, Son2):  def __init__(self, name, age, gender):    Son1.__init__(self, name, age) # 單獨調用父類的初始化方法    Son2.__init__(self, name, gender)    print('Grandson的init結束被調用')gs = Grandson('grandson', 12, '男')

執行結果:

可以看出使用父類名.init(self)方式調用父類時,parent父類被調用了兩次,此方法對于多繼承不太合適。

2.MRO順序:

上述代碼,我們發現由于多繼承情況,parent類被的屬性被構造了兩次,如果在更加復雜的結構下可能更加嚴重。

為了解決這個問題,Python官方采用了一個算法將復雜結構上所有的類全部都映射到一個線性順序上,而根據這個順序就能夠保證所有的類都會被構造一次。

這個順序就是MRO順序。

MRO順序采用C3算法廣度優先遍歷。

使用方法: 類名.mro()或類名.mro()

3.super調用父類:

使用super().init()方式調用父類時:

例:

class Parent(object):  def __init__(self, name, *args, **kwargs): # 為避免多繼承報錯,使用不定長參數,接受參數    self.name = name    print('parent的init結束被調用')class Son1(Parent):  def __init__(self, name, age, *args, **kwargs): # 為避免多繼承報錯,使用不定長參數,接受參數    self.age = age    super().__init__(name, *args, **kwargs) # 為避免多繼承報錯,使用不定長參數,接受參數    print('Son1的init結束被調用')class Son2(Parent):  def __init__(self, name, gender, *args, **kwargs): # 為避免多繼承報錯,使用不定長參數,接受參數    self.gender = gender    super().__init__(name, *args, **kwargs) # 為避免多繼承報錯,使用不定長參數,接受參數    print('Son2的init結束被調用')class Grandson(Son1, Son2):  def __init__(self, name, age, gender):    # 多繼承時,相對于使用類名.__init__方法,要把每個父類全部寫一遍    # 而super只用一句話,執行了全部父類的方法,這也是為何多繼承需要全部傳參的一個原因    # super(Grandson, self).__init__(name, age, gender)    super().__init__(name, age, gender)    print('Grandson的init結束被調用')gs = Grandson('grandson', 12, '男')print(Grandson.__mro__)

運行結果:

parent父類只被調用了一次,super方法會按照MRO順序調用下一個父類。

總結:

(1)MRO保證了多繼承情況 每個類只出現一次

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久网站免费 | 亚洲成人高清电影 | 中文字幕综合 | 色视频欧美 | 久久亚洲国产精品 | 精品国产一区二区三区蜜殿 | 一区二区三区手机在线观看 | 黄色网址免费在线播放 | 亚洲成人中文字幕在线 | 日韩视频在线免费 | 久久蜜桃精品一区二区三区综合网 | 在线免费观看欧美 | 特级毛片a级毛片100免费 | 久久中文一区 | 日本精品视频一区二区三区四区 | 免费在线观看午夜视频 | 在线观看国产一区二区三区 | 精品一区久久久 | 男女无遮挡羞羞视频 | 美女黄视频在线观看 | 色综合精品 | 中文字幕一区2区 | 日韩激情一区二区三区 | 黄色大片在线免费看 | 久草在线高清视频 | 国产精品99久久久久久大便 | 欧美高清视频一区 | 美女视频网站黄色 | 手机免费看一级片 | 欧美一级电影网站 | 国产日韩久久久久69影院 | 爽爽视频免费看 | 青青草免费观看完整版高清 | 曰批全过程120分钟免费69 | 黄色av免费网站 | 色偷偷一区| 久久激情小视频 | 黄污网站在线 | 在线成人免费观看视频 | 欧美性受xxxx白人性爽 | 成人做爰s片免费看网站 |