python類的多型學習筆記

2021-10-24 03:39:39 字數 1918 閱讀 5485

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...