您好,登錄后才能下訂單哦!
小編給大家分享一下關(guān)于python中繼承機制的案例分析,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
繼承機制經(jīng)常用于創(chuàng)建和現(xiàn)有類功能類似的新類,又或是新類只需要在現(xiàn)有類基礎(chǔ)上添加一些成員(屬性和方法),但又不想直接將現(xiàn)有
類代碼復(fù)制給新類。也就是說,通過使用繼承這種機制,可以輕松實現(xiàn)類的重復(fù)使用。
舉個例子,假設(shè)現(xiàn)有一個 Shape 類,該類的 draw() 方法可以在屏幕上畫出指定的形狀,現(xiàn)在需要創(chuàng)建一個 Form 類,要求此類不但可以
在屏幕上畫出指定的形狀,還可以計算出所畫形狀的面積。要創(chuàng)建這樣的類,笨方法是將 draw() 方法直接復(fù)制到新類中,并添加計算面
積的方法。實現(xiàn)代碼如下所示:
class Shape: def draw(self,content): print("畫",content) class Form: def draw(self,content): print("畫",content) def area(self): #.... print("此圖形的面積為...")
當然還有更簡單的方法,就是使用類的繼承機制。實現(xiàn)方法為:讓 From 類繼承 Shape 類,這樣當 From 類對象調(diào)用 draw() 方法時,
Python 解釋器會先去 From 中找以 draw 為名的方法,如果找不到,它還會自動去 Shape 類中找。如此,我們只需在 From 類中添加
計算面積的方法即可,示例代碼如下:
class Shape: def draw(self,content): print("畫",content) class Form(Shape): def area(self): #.... print("此圖形的面積為...")
上面代碼中,class From(Shape) 就表示 From 繼承 Shape。
Python 中,實現(xiàn)繼承的類稱為子類,被繼承的類稱為父類(也可稱為基類、超類)。因此在上面這個樣例中,F(xiàn)rom 是子類,Shape 是父類。
子類繼承父類時,只需在定義子類時,將父類(可以是多個)放在子類之后的圓括號里即可。語法格式如下:
class 類名(父類1, 父類2, ...): #類定義部分
注意,有讀者可能還聽說過“派生”這個詞匯,它和繼承是一個意思,只是觀察角度不同而已。換句話話,繼承是相對子類來說的,即子
類繼承自父類;而派生是相對于父類來說的,即父類派生出子類。
了解了繼承機制的含義和語法之后,下面代碼演示了繼承機制的用法:
class People: def say(self): print("我是一個人,名字是:",self.name) class Animal: def display(self): print("人也是高級動物") #同時繼承 People 和 Animal 類 #其同時擁有 name 屬性、say() 和 display() 方法 class Person(People, Animal): pass zhangsan = Person() zhangsan.name = "張三" zhangsan.say() zhangsan.display()
關(guān)于Python的多繼承
事實上,大部分面向?qū)ο蟮木幊陶Z言,都只支持單繼承,即子類有且只能有一個父類。而 Python 卻支持多繼承(C++也支持多繼承)。
和單繼承相比,多繼承容易讓代碼邏輯復(fù)雜、思路混亂,一直備受爭議,中小型項目中較少使用,后來的 Java、C#、PHP 等干脆取消了多繼承。
使用多繼承經(jīng)常需要面臨的問題是,多個父類中包含同名的類方法。對于這種情況,Python 的處置措施是:根據(jù)子類繼承多個父類時這些父類的前后次序決定,即排在前面父類中的類方法會覆蓋排在后面父類中的同名類方法。
舉個例子:
class People: def __init__(self): self.name = People def say(self): print("People類",self.name) class Animal: def __init__(self): self.name = Animal def say(self): print("Animal類",self.name) #People中的 name 屬性和 say() 會遮蔽 Animal 類中的 class Person(People, Animal): pass zhangsan = Person() zhangsan.name = "張三" zhangsan.say()
看完了這篇文章,相信你對關(guān)于python中繼承機制的案例分析有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。