python類的繼承
類的繼承,跟人類繁衍的關系相似。
被繼承的類稱為基類(也叫做父類),繼承而得的類叫派生類(也叫子類),這種關系就像人類的父子關系。
繼承最大的好處是子類獲得了父類的全部變量和方法的同時,又可以根據需要進行修改、拓展。
繼承的語法結構是
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):
# 調用父類的實例化方法
People.__init__(self, name, age, weight)
self.grade = grade
由于繼承的機制,Student 實例會擁有 People 類所有屬性和方法,比如下邊我可以直接調用 People 類的 speak 方法。
>>> xm = Student(name="小明", age=10, weight=50, grade="三年級")
>>> xm.speak()
小明 說: 我 10 歲。
你如果不想使用父類的方法,你可以重寫它以覆蓋父類的 speak
方法。
# 單繼承示例
class Student(People):
def __init__(self, name, age, weight, grade):
# 調用父類的實例化方法
People.__init__(self, name, age, weight)
self.grade = grade
# 重寫父類的speak方法
def speak(self):
print(f"{self.name} 說: 我{self.age}歲了,我在讀{self.grade}")
此時,再調用的話,就會調用自己的方法了
>>> xm = Student(name="小明", age=10, weight=50, grade="三年級")
>>> xm.speak()
小明 說: 我10歲了,我在讀三年級
2. 多繼承
Python 還支持多繼承,可以繼承自多個類。
class 子類(父類1, 父類2, 父類3...):
多繼承的話,情況會比單繼承復雜得多。
假設多個父類都有一個 foo 方法,并且子類沒有重寫 foo 方法,那么 子類 的實例在調用 foo 方法時,應該使用哪個父類的 foo 方法呢?
關于這一點,只要簡單的做個驗證就行啦。
有如下代碼,定義了 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
運行后的結果如下
>>> a = A()
>>> a.show()
i am B
在類A中,沒有show()這個方法,于是它只能去它的父類里查找,它首先在B類中找,結果找到了,于是直接執行B類的show()方法。可見,在A的定義中,繼承參數的書寫有先后順序,寫在前面的被優先繼承。
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
執行結果是
>>> a = A()
>>> a.show()
i am D
由此可見,多繼承的順序使用的是從左向右再深度優先的原則。
審核編輯:符乾江
-
python
+關注
關注
56文章
4782瀏覽量
84449 -
繼承
+關注
關注
0文章
10瀏覽量
2689
發布評論請先 登錄
相關推薦
評論