1.重寫
多型這個概念依賴於繼承,因為繼承,使得子類擁有了父類的方法,這裡就產生了乙個問題,如果子類有乙個方法和父類的方法同名,那麼子類在呼叫這個方法時,究竟是呼叫子類自己的方法還是父類的方法呢?
class
base()
:def
print
(self)
:print
("base"
)class
a(base)
:def
print
(self)
:print
("a"
)a = a()a.
print
()
輸出為
a
如果我們對a的print進行修改,比如
class
base()
:def
print
(self)
:print
("base"
)class
a(base)
:def
no_print
(self)
:print
("a"
)a = a()a.
print
()
輸出為
base
父類和子類都有print方法,那麼子類a的物件a呼叫print方法時,呼叫的是誰的print方法呢?
答案是子類的print方法,如果a類沒有定義print方法,那麼a.print()呼叫的就是父類的print方法,但是a類定義了print方法,這種情況稱之為重寫,a類重寫了父類的print方法
2.繼承的搜尋
在繼承時,子類「擁有」父類的方法和屬性,這種擁有不是真實意義上的擁有。
class
base()
:def
print
(self)
:print
("base"
)class
a(base)
:pass
print(id
(base.
print))
print(id
(a.print
))
結果如下
1849376805944
1849376805944
base.print和a.print的記憶體位址是相同的,這說明他們是同乙個方法。執行a.print時,python會尋找print方法,它會先從a類的定義中尋找,沒有找到再起a的父類中尋找方法,如果找不到就繼續向上尋找
3.多型的表現形式
同一類事物,有多重形態
class
animal
:def
run(self)
:raise notimplementederror
class
people
(animal)
:def
run(self)
:print
("人在行走"
)class
pig(animal)
:def
run(self)
:print
("豬在跑"
)
p1 = people(
)p1.run(
)p2 = pig(
)p2.run(
)
輸出為
人在行走
豬在跑
people和pig都繼承了animal,都是動物,是同一類事物,他們都有run方法,但是最終的執行結果卻不一樣,這就是多型,同一類事物有多種形態。 Java學習筆記 類的多型
傳送訊息給某個物件,讓該物件自行決定響應何種行為。靜態多型 過載 重寫 動態多型 執行時確定函式的具體呼叫,通過將子類物件賦值給父類變數來實現動態方法呼叫。父類的引用可以指向子類的物件 向上轉型。person p new teacher 向上轉型 既可以使用子類強大的功能,又可以抽取父類的共性。例 ...
Python學習筆記 多型
物件導向三大特性 1.封裝 根據職責將屬性和方法封裝到乙個抽象的類中 定義類的準則 2.繼承 實現 的重用,相同的 不需要重複的編寫 設計類的技巧 子類針對自己特有的需求,編寫特定的 3.多型 不同的子類物件 呼叫相同的父類方法,產生不同的執行結果 多型 可以增加 的靈活度 以繼承和重寫父類方法為前...
Python學習筆記 多型
多型指的是同乙個方法呼叫,由於物件不同可能會產生不同的行為 比如都是人,人.china 筷子 人.india 手抓飯 注意兩點 1.多型是方法的多型,屬性沒有多型 2.多型的存在有兩個必要條件 繼承 方法重寫 class man defeat self print 餓了,吃飯了 class chin...