15 - 多繼承&多態

返回主頁

📄目錄

1 多繼承

1.1 子類可以擁有多個父類,並且具有所有父類的屬性和方法

python-logo

輸出結果:

1.2 不同的父類存在同名的方法

⚠️⚠️ 實際開發時,需要盡量避免這種情況

python-logo

輸出結果:

1.3 方法的搜索順序(了解)

💡 python中內置屬性__mro__可以查看方法搜索順序

python-logo

輸出結果:

1.4 多繼承的弊端⚠️

2 多態

指同一種行為具有不同的表現形式

2.1 多態的前提

多態的特點:

  1. 不關注對象的類型,關注對象具有的行為,也就是對象的實例方法是否同名

  2. 多態的好處:可以增加代碼的外部調用靈活度,讓代碼更加通用,兼容性比較強

  3. 不同的子類對象,調用相同的父類方法,會產生不同的執行結果

多態即同一東西(+)的不同表現形式:

python-logo

輸出結果:

2.2 多態性:一種調用方式,不同的執行結果

python-logo

輸出結果:

👉🏻 test函數傳入不同的對象,執行不同對象的eat方法

3 靜態方法 @staticmethod

python-logo

輸出結果:

python-logo

輸出結果:

💡 取消不必要的參數傳遞,有利於減少不必要的內存佔用和性能消耗

4 類方法 @classmethod

使用裝飾器@classmethod來標識為類方法,對於類方法,第一個參數必須是類對象,一般是以cls作為第一個參數。

格式:

類方法內部可以訪問類屬性,或者調用其他類方法

python-logo

輸出結果:

💡 使用場合:

5 方法的總結

  1. 實例方法:方法內部訪問實例屬性,方法內部可以通過「類名.類屬性名」來訪問類屬性

  2. 靜態方法:方法內部不需要訪問實例屬性和類性。如果要訪問類屬性,通過「類名.類屬性名」訪問,不能訪問實例屬性

  3. 類方法:方法內部只需要訪問類屬性,可以通過「cls.類屬性名」訪問類屬性,不能訪問實例屬性

python-logo

輸出結果:

6 __init__()__new__()

6.1 __init__():初始化對象

python-logo

輸出結果:

6.2 __new__():object基類提供的內置的靜態方法

作用:

  1. 在內存中為對象分配空間

  2. 返回對象的引用

python-logo

輸出結果:

6.3 一個對象的實例化過程

執行步驟:先執行__new__(),如果沒有寫__new__(),默認調用object基類提供的__new__(),返回一個實例對象,然後再去調用__init__(),對對象進行初始化

python-logo

輸出結果:

6.4 總結:__init__()__new__()

  1. __new__()是創建對象,__init__()是初始化對象

  2. __new__()是返回對象引用,__init__()是定義實例屬性

  3. __new__()是類級別的方法,__init__()是實例級別的方法

導航連結:

目的地超連結
首頁返回主頁
Python學習Python學習
上一篇14 - 封裝、單繼承
下一篇16 - 單例模式&魔法方法