程式中的繼承(單繼承,多繼承)簡單的介紹
阿新 • • 發佈:2018-12-11
程式中的繼承
- 在程式中,繼承描述的是多個類之間的所屬關係。
- 如果一個類A裡面的屬性和方法可以複用,則可以通過繼承的方式,傳遞到類B裡。
- 那麼類A就是基類,也叫做父類;類B就是派生類,也叫做子類。
單繼承:子類只繼承一個父類
故事情節:煎餅果子老師傅在煎餅果子界摸爬滾打幾十年,擁有一身精湛的煎餅果子技術,並總結了一套"古法煎餅果子配方"。
可是老師傅年邁已久,在嗝屁之前希望把自己的配方傳承下去,於是老師傅把配方傳給他的徒弟大貓...
# 定義一個Master類 class Master(object): def __init__(self): # 屬性 self.kongfu = "古法煎餅果子配方" # 例項方法 def make_cake(self): print("按照 <%s> 製作了一份煎餅果子..." % self.kongfu) # 定義Prentice類,繼承了 Master,則Prentice是子類,Master是父類。 class Prentice(Master): # 子類可以繼承父類所有的屬性和方法,哪怕子類沒有自己的屬性和方法,也可以使用父類的屬性和方法。 pass # laoli = Master() # print(laoli.kongfu) # laoli.make_cake() damao = Prentice() # 建立子類例項物件 print(damao.kongfu) # 子類物件可以直接使用父類的屬性 damao.make_cake() # 子類物件可以直接使用父類的方法
說明:
- 雖然子類沒有定義
__init__
方法初始化屬性,也沒有定義例項方法,但是父類有。所以只要建立子類的物件,就預設執行了那個繼承過來的__init__
方法
總結:
- 子類在繼承的時候,在定義類時,小括號()中為父類的名字
- 父類的屬性、方法,會被繼承給子類
多繼承:子類繼承多個父類
class Master(object): def __init__(self): self.kongfu = "古法煎餅果子配方" # 例項變數,屬性 def make_cake(self): # 例項方法,方法 print("[古法] 按照 <%s> 製作了一份煎餅果子..." % self.kongfu) def dayandai(self): print("師傅的大煙袋..") class School(object): def __init__(self): self.kongfu = "現代煎餅果子配方" def make_cake(self): print("[現代] 按照 <%s> 製作了一份煎餅果子..." % self.kongfu) def xiaoyandai(self): print("學校的小菸袋..") # class Prentice(School, Master): # 多繼承,繼承了多個父類(School在前) # pass # damao = Prentice() # print(damao.kongfu) # damao.make_cake() # damao.dayandai() # damao.xiaoyandai() class Prentice(Master, School): # 多繼承,繼承了多個父類(Master在前) pass damao = Prentice() print(damao.kongfu) # 執行Master的屬性 damao.make_cake() # 執行Master的例項方法 # 子類的魔法屬性__mro__決定了屬性和方法的查詢順序 print(Prentice.__mro__) damao.dayandai() # 不重名不受影響 damao.xiaoyandai()
說明:
- 多繼承可以繼承多個父類,也繼承了所有父類的屬性和方法
- 注意:如果多個父類中有同名的 屬性和方法,則預設使用第一個父類的屬性和方法(根據類的魔法屬性mro的順序來查詢)
- 多個父類中,不重名的屬性和方法,不會有任何影響。