一、繼承
概述:
????????實際開發中,我們發現很多類中的步分內容是相似的,或者相同的,每次寫很麻煩,針對這種情況, 我們可以把這些相似(相同的)部分抽取出來,單獨地放到1個類中(父類), 然后讓多個類(子類)和這個類產生關系,這個關系就叫:繼承。
通俗解釋:
????????子承父業,Python中的繼承,子類=>繼承父類的 屬性,行為。
格式:
???????? class 子類名(父類名):
???????????????? pass
優點:
???????? 1.提高代碼的復用性; 2.提高代碼的可維護性。
缺點:
???????? 耦合性增強了,好壞都繼承了過來。
?????????耦合:指的是類與類之間的關系
????????細節:
???????? 1.所有的類都直接或間接繼承自object,它是所有類的父類,也叫:頂級類
? ? ? ?
'''
繼承相關概述:概述:實際開發中,我們發現很多類中的步分內容是相似的,或者相同的,每次寫很麻煩,針對這種情況,我們可以把這些相似(相同的)部分抽取出來,單獨地放到1個類中(父類),然后讓多個類(子類)和這個類產生關系,這個關系就叫:繼承通俗解釋:子承父業,Python中的繼承,子類=>繼承父類的 屬性,行為格式:class 子類名(父類名):pass優點:1.提高代碼的復用性;2.提高代碼的可維護性。缺點:耦合性增強了,好壞都繼承了過來耦合:指的是類與類之間的關系細節:1.所有的類都直接或間接繼承自object,它是所有類的父類,也叫:頂級類
'''
class Father:def __init__(self):self.gender='男'def walk(self):print('飯后走一走,能活九十九!')
class Son(Father):pass
if __name__ == '__main__':s=Son()print(f'gender:{s.gender}')s.walk()print(type(s.walk))
運行結果:
二、多繼承
1. Python中支持多繼承寫法, 即: 1個類可以有多個父類。
????????寫法為: ? class 子類名(父類名1, 父類名2...)
2. 多繼承關系中, 子類可以繼承所有父類的屬性和行為. ? 前提: 父類的私有成員除外.
3. 多繼承關系中, 多個父類如果有重名屬性或者方法時, 子類會優先使用第1個父類(即: 最前邊的父類)的該成員.
4. 上述的繼承關系, 我們可以通過 Python內置的 mro屬性 或者 mro()方法來查看. ?
? mro: Method Resolution Order, 即: 方法的解析順序(調用順序)
class Master(object):# 1.1 定義父類的 屬性.def __init__(self):self.kongfu = '[古法煎餅果子配方]'self.name = 'Master'# 1.2 定義父類的 行為, 表示: 攤煎餅.def make_cake(self):print(f'使用 {self.kongfu} 制作煎餅果子')# 2. 創建1個師傅類, 充當父類.
class School(object):# 2.1 定義父類的 屬性.def __init__(self):self.kongfu = '[黑馬AI煎餅果子配方]'# 2.2 定義父類的 行為, 表示: 攤煎餅.def make_cake(self):print(f'使用 {self.kongfu} 制作煎餅果子')# 3. 定義徒弟類, 繼承自師傅類.
class Prentice(School, Master):pass# 在main函數中測試
if __name__ == '__main__':# 4. 創建子類的對象p = Prentice()# 5. 嘗試打印 p對象的 屬性 和 行為print(f'從父類繼承的屬性: {p.kongfu}')p.make_cake() # 從父類繼承來的行為.print('-' * 21)# 6. 演示方法的解析順序, 即: MRO, 看看方法優先會從哪些類中找.print(Prentice.__mro__) # 輸出: Prentice > School > Master > object, 封裝成: 元組print(Prentice.mro()) # 輸出: Prentice > School > Master > object, 封裝成: 列表
運行結果:
三、重寫
概述:
???????? 子類出現和父類重名的屬性, 方法時, 會覆蓋父類中的成員, 這種寫法就稱之為: 重寫, 也叫: 覆蓋.
注意: 重寫一般特指: 方法重寫.
應用場景:
???????? 當子類需要沿襲父類的功能, 而功能主體又有自己額外需求的時候, 就可以考慮使用方法重寫了.
細節:
???????? 1. 子類有和父類重名的屬性和方法時, 優先使用 子類的成員. 就近原則.