標籤:lang 多個 相同 之一 準則 tcl 選擇 -name 原理
繼承
繼承指的是類與類之間的關係,是一種什麼“是”什麼的關係,繼承的功能之一就是用來解決代碼重用問題
繼承是一種建立新類的方式,在python中,建立的類可以繼承一個或多個父類,父類又可以成為基類或超類,建立的類稱為衍生類別或子類
python中類的繼承分為:單繼承和多繼承
class ParentClass1: #定義父類 passclass ParentClass2: #定義父類 passclass SubClass1(ParentClass1): #單繼承,基類是ParentClass1,衍生類別是SubClass passclass SubClass2(ParentClass1,ParentClass2): #python支援多繼承,用逗號分隔開多個繼承的類 pass
繼承與重用性
在開發程式的過程中,如果我們定義了一個類A,然後又想建立立另外一個類B,但是類B的大部分內容與類A的相同時
我們不可能從頭開始寫一個類B,這就用到了類的繼承的概念。
通過繼承的方式建立類B,讓B繼承A,B會‘遺傳’A的所有屬性(資料屬性和函數屬性),實現代碼重用。
繼承的實現原理
python到底是如何?繼承的,對於你定義的每一個類,python會計算出一個方法解析順序(MRO)列表,這個MRO列表就是一個簡單的所有基類的線性順序列表。
為了實現繼承,python會在MRO列表上從左至右開始尋找基類,直到找到第一個匹配這個屬性的類為止。而這個MRO列表的構造是通過一個C3線性化演算法來實現的。我們不去深究這個演算法的數學原理,它實際上就是合并所有父類的MRO列表並遵循如下三條準則:
- 子類會先於父類被檢查
- 多個父類會根據它們在列表中的順序被檢查
- 如果對下一個類存在兩個合法的選擇,選擇第一個父類
在子類中調用父類的方法
在子類派生出的新方法中,往往需要重用父類的方法,我們有兩種方式實現
方式一:父類名.父類方法()
方式二:super()
兩種方式的區別是:方式一是跟繼承沒有關係的,而方式二的super()是依賴於繼承的,並且即使沒有直接繼承關係,super仍然會按照mro繼續往後尋找
python基礎 繼承