python類的繼承
類的繼承,跟人類繁衍的關(guān)系相似。
被繼承的類稱為基類(也叫做父類),繼承而得的類叫派生類(也叫子類),這種關(guān)系就像人類的父子關(guān)系。
繼承最大的好處是子類獲得了父類的全部變量和方法的同時,又可以根據(jù)需要進行修改、拓展。
繼承的語法結(jié)構(gòu)是
class 子類(父類):
1. 單繼承
舉個例子:下面的代碼中。先是定義了一個 People 類,里面有一個 speak 方法。然后再定義一個 Student 類,并繼承自 People 類。
# 父類定義
class People:
def __init__(self, name, age, weight):
self.name = name
self.age = age
def speak(self):
print(f"{self.name} 說: 我{self.age}歲。")
# 單繼承示例
class Student(People):
def __init__(self, name, age, weight, grade):
# 調(diào)用父類的實例化方法
People.__init__(self, name, age, weight)
self.grade = grade
由于繼承的機制,Student 實例會擁有 People 類所有屬性和方法,比如下邊我可以直接調(diào)用 People 類的 speak 方法。
>>> xm = Student(name="小明", age=10, weight=50, grade="三年級")
>>> xm.speak()
小明 說: 我 10 歲。
你如果不想使用父類的方法,你可以重寫它以覆蓋父類的 speak
方法。
# 單繼承示例
class Student(People):
def __init__(self, name, age, weight, grade):
# 調(diào)用父類的實例化方法
People.__init__(self, name, age, weight)
self.grade = grade
# 重寫父類的speak方法
def speak(self):
print(f"{self.name} 說: 我{self.age}歲了,我在讀{self.grade}")
此時,再調(diào)用的話,就會調(diào)用自己的方法了
>>> xm = Student(name="小明", age=10, weight=50, grade="三年級")
>>> xm.speak()
小明 說: 我10歲了,我在讀三年級
2. 多繼承
Python 還支持多繼承,可以繼承自多個類。
class 子類(父類1, 父類2, 父類3...):
多繼承的話,情況會比單繼承復(fù)雜得多。
假設(shè)多個父類都有一個 foo 方法,并且子類沒有重寫 foo 方法,那么 子類 的實例在調(diào)用 foo 方法時,應(yīng)該使用哪個父類的 foo 方法呢?
關(guān)于這一點,只要簡單的做個驗證就行啦。
有如下代碼,定義了 7 個類
class D:pass
class C(D):pass
class B(C):
def show(self):
print("i am B")
class G:pass
class F(G):pass
class E(F):
def show(self):
print("i am E")
class A(B, E):pass
運行后的結(jié)果如下
>>> a = A()
>>> a.show()
i am B
在類A中,沒有show()這個方法,于是它只能去它的父類里查找,它首先在B類中找,結(jié)果找到了,于是直接執(zhí)行B類的show()方法。可見,在A的定義中,繼承參數(shù)的書寫有先后順序,寫在前面的被優(yōu)先繼承。
3. 繼承順序
那如果B沒有show方法,而是D有呢?
class D:
def show(self):
print("i am D")
class C(D):pass
class B(C):pass
class G:pass
class F(G):pass
class E(F):
def show(self):
print("i am E")
class A(B, E):pass
執(zhí)行結(jié)果是
>>> a = A()
>>> a.show()
i am D
由此可見,多繼承的順序使用的是從左向右再深度優(yōu)先的原則。
審核編輯:符乾江
-
python
+關(guān)注
關(guān)注
56文章
4810瀏覽量
85074 -
繼承
+關(guān)注
關(guān)注
0文章
10瀏覽量
2740
發(fā)布評論請先 登錄
相關(guān)推薦
使用Python實現(xiàn)xgboost教程
使用Python進行串口通信的案例
Python代理技術(shù)詳解:從入門到進階
基于OpenHarmony標準系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeQueue
![基于OpenHarmony標準系統(tǒng)的C++公共基礎(chǔ)<b class='flag-5'>類</b>庫案例:SafeQueue](https://file.elecfans.com/web2/M00/26/21/pYYBAGG5jjSALfrEAAAwAa9Oig8799.png)
基于OpenHarmony標準系統(tǒng)的C++公共基礎(chǔ)類庫案例:SafeStack
![基于OpenHarmony標準系統(tǒng)的C++公共基礎(chǔ)<b class='flag-5'>類</b>庫案例:SafeStack](https://file.elecfans.com/web2/M00/26/21/pYYBAGG5jjSALfrEAAAwAa9Oig8799.png)
java子類可以繼承父類的什么
pytorch和python的關(guān)系是什么
Python建模算法與應(yīng)用
Python在AI中的應(yīng)用實例
如何實現(xiàn)Python復(fù)制文件操作
opencv-python和opencv一樣嗎
用pycharm進行python爬蟲的步驟
python解析netflow數(shù)據(jù)到csv的流程詳解
![<b class='flag-5'>python</b>解析netflow數(shù)據(jù)到csv的流程<b class='flag-5'>詳解</b>](https://file1.elecfans.com/web2/M00/D9/FE/wKgaomYpzAiAPrQGAABVCN7G14M811.png)
基于Python的地圖繪制教程
![基于<b class='flag-5'>Python</b>的地圖繪制教程](https://file1.elecfans.com/web2/M00/C0/F4/wKgZomXb72KADq8JAABAFRaefm0918.png)
評論