編寫類時,並非總是要從空白開始。如果要編寫的類時另一個現成類的特殊版本,可使用繼承。一個類繼承另一個類時,它將自動獲得另一個類的所有屬性和方法 原有的類稱為父類,而新類被稱為子類。子類繼承了其父類的所有屬性和方法,同時還可以定義自己的屬性和方法。 繼承語法格式: class 子類名(父類名): # ...
編寫類時,並非總是要從空白開始。如果要編寫的類時另一個現成類的特殊版本,可使用繼承。一個類繼承另一個類時,它將自動獲得另一個類的所有屬性和方法
原有的類稱為父類,而新類被稱為子類。子類繼承了其父類的所有屬性和方法,同時還可以定義自己的屬性和方法。
繼承語法格式:
class 子類名(父類名):
1.子類的__init__方法
創建子類的實例時,Python首先需要完成的任務是給父類的所有屬性賦值。為此,子類的__init__方法在初始化子類屬性時,需要先將父類的所有屬性賦值
子類中給父類屬性賦值的語法格式:
super().__init__(實參變數1,實參變數2,,,,,實參變數n)
比如動物貓Cat這個子類,繼承動物Animal這個父類,編寫程式如下所示:
註意:
1.創建子類時,父類必須包含在當前文件中,且位於子類前面,可以通過import導入到當前文件。
2.super是一個特殊的函數,幫助Python將父類和子類關聯起來。這行代碼讓Python調用Cat的父類的__init__方法,讓Cat類的實例cat包含父類的所有屬性。
我們通過子類將name傳給父類,然後通過調用父類的eat方法,實現了子類實例對父類方法的調用,驗證了此時子類繼承了父類的所有屬性和方法
2.給子類定義屬性和方法
子類繼承父類後,可添加區分子類和父類的屬性和方法。
比如我們給Cat類添加一個貓特有的屬性捉老鼠的數量num,給Animal類添加一個動物共有的屬性年齡age,編寫程式如下所示:
對於Cat類的特殊化程度沒有任何限制。可以根據所需的準確程度添加任意數量的屬性和方法。如果一個屬性或者方法是任何動物都有的,而不是動物貓特有的,我們就往動物Animal類中添加,是動物貓特有的我們就往貓Cat類中添加。這樣動物Animal類有動物的通用屬性和方法,貓Cat類有特有的屬性和方法,我們只需根據需要調用即可
註意:
子類可以調用父類的屬性和方法,但是父類不可調用子類的屬性和方法
會提示父類沒有子類的方法等錯誤。
3.重寫父類的方法
對於父類的方法,只要它不符合子類的方法邏輯,都可對其進行重寫。為此,可在子類定義一個這樣的方法,即它與要重寫的父類方法同名。這樣Python在用子類調用這個方法的時候,就不會去調用父類的同名方法,而是去調用子類的同名方法。
編寫程式如下所示:
我們看到我們在子類中重新編寫了__str__方法,當子類調用該方法時,是調用子類中的該方法,而不是父類中的該方法。