繼承是面向?qū)ο蟮娜筇卣髦?,也是實現(xiàn)代碼復(fù)用的重要手段。繼承經(jīng)常用于創(chuàng)建和現(xiàn)有類功能類似的新類,又或是新類只需要在現(xiàn)有類基礎(chǔ)上添加一些成員(屬性和方法),但又不想直接將現(xiàn)有類代碼復(fù)制給新類。
例如,有一個Shape類,該類的draw()方法可以在屏幕上畫出指定的形狀,現(xiàn)在需要創(chuàng)建一個Rectangle類,要求此類不但可以在屏幕上畫出指定的形狀,還可以計算出所畫形狀的面積。要創(chuàng)建這樣的Rectangle類,除了將draw()方法直接復(fù)制到新類中,并添加計算面積的方法,其實還有更簡單的方法,即讓Rectangle類繼承Shape類,這樣當(dāng)Rectangle類對象調(diào)用draw()方法時,Python解釋器會自動去Shape類中調(diào)用該方法,如此,我們只需在Rectangle類中添加計算面積的方法即可。
Python中,實現(xiàn)繼承的類稱為子類,被繼承的類稱為父類(也可稱為基類、超類)。子類繼承父類的語法是:在定義子類時,將多個父類放在子類之后的圓括號里。語法格式如下:
class類名(父類1,父類2,...):
#類定義部分
注意,Python的繼承是多繼承機制,即一個子類可以同時擁有多個直接父類。
從上面的語法格式來看,定義子類的語法非常簡單,只需在原來的類定義后增加圓括號,并在圓括號中添加多個父類,即可表明該子類繼承了這些父類。如果在定義一個Python類時,并未顯式指定這個類的直接父類,則這個類默認(rèn)繼承object類。
object類是所有類的父類,要么是直接父類,要么是間接父類。
父類和子類的關(guān)系,就好像水果和蘋果的關(guān)系,蘋果是一種特殊的水果,蘋果是水果的子類,水果是蘋果的父類,因此可以說,蘋果繼承了水果。不僅如此,由于子類是一種特殊的父類,因此父類包含的范圍總比子類包含的范圍要大,所以可以認(rèn)為父類是大類,而子類是小類。
從實際意義上看,子類是對父類的擴展,子類是一種特殊的父類。從這個意義上看,使用繼承來描述子類和父類的關(guān)系是錯誤的,用擴展更恰當(dāng)。因此,這樣的說法更加準(zhǔn)確:蘋果擴展了水果這個類。
下面程序示范了子類繼承父類的特點。下面是Fruit類的代碼:
classFruit:
definfo(self):
print("我是一個水果!重%g克"%self.weight)
classFood:
deftaste(self):
print("不同食物的口感不同")
#定義Apple類,繼承了Fruit和Food類
classApple(Fruit,Food):
pass
#創(chuàng)建Apple對象
a=Apple()
a.weight=5.6
#調(diào)用Apple對象的info()方法
a.info()
#調(diào)用Apple對象的taste()方法
a.taste()
運行結(jié)果為
我是一個水果!重5.6克
不同食物的口感不同
上面程序中,定義了兩個父類:Fruit類和Food類,接下來定義了一個Apple類,該類本身是空類,但其繼承自Food類和Fruit類。因此,在主程序部分創(chuàng)建了Apple對象之后,可以訪問Apple對象的info()和taste()方法,這表明Apple對象也具有了info()和taste()方法,這就是繼承的作用,即子類擴展(繼承)了父類,將可以繼承得到父類定義的方法,這樣子類就可復(fù)用父類的方法了。
以上內(nèi)容為大家介紹了Python培訓(xùn)之允許繼承嗎,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機構(gòu):千鋒教育。