天天看點

類的多态與鴨子類型

類的多态與鴨子類型

一、什麼是多态?

二、由多态帶來的特性=》多态性

1.什麼是多态性

2.多态性的使用

3.多态性的好處

列舉python中含有這種多态性的思想的執行個體

三、abs 子產品限制子類必須重寫父類的某些方法

abs 子產品使用小結

四、鴨子類型

1.什麼是鴨子類型

2.為什麼推崇鴨子類型?

3.鴨子類型的示例

參考資料

多态是同一類事物具有的多種形态。

我國有句俗語:“龍生九子,各有不同”。這就是多态。多态是面向對象程式設計的重要特點之一。

示例:

你、你的姐姐、你的兄弟,都屬于人這同一類。這就是多态。

多态性指的是在不考慮對象的具體類型下, 直接使用對象的方法, 同一種調用方式, 運作的效果不一樣 (這就需要在設計時, 把對象的調用方法設計成形式統一的一種)

面向對象方法中一般是這樣表述多态性:向不同的對象發送同一條消息,不同的對象在接收時會産生不同的行為(即方法)。也就是說,每個對象可以用自己的方式去響應共同的消息。所謂消息,就是調用函數,不同的行為就是指不同的實作,即執行不同的函數

由多态性的關系, 對象的調用方式可以更進一步, 可以定義一個統一的接口來使用,進而增強了程式的靈活性和可擴充性.

增加了程式的靈活性 : 對于使用者來說都是使用同一種方式去調用每個對象的方法

增加了程式的可擴充性 : 如果我們建立一個類或者又執行個體出一個對象, 使用者無需更改自己的代碼, 還是原來的調用方式

多态的前提是 : 同一類事物, 最好的方法就是讓他們繼承同一個基類
為了保證多态, 我們可以使用 abc 子產品來強制的要求子類必須重寫父類的某些功能, 如果不重寫, 則會報錯 多态性的本質在于不同的類中定義有相同的方法名, 這樣我們就可以不考慮類而統一用一種方式去适用對象, 基于這種前提下, 我們還可以進一步使用限制性的思想來提升這種高度. 是以我們可以通過在父類中引入抽象類的概念來硬性限制子類必須有某些方法名

abs 子產品不是我們來保證多态的慣用做法, Python中有其他方法可以實作

python中不推薦強制使用父類來限制子類,python推崇使用鴨子類型來實作多态

鴨子類型, 它并不要求嚴格的繼承體系,即一個對象看起來像鴨子, 走路像鴨子, 說話也像鴨子, 具備了鴨子的所有特征和行為, 那麼我們就可以說這個對象就是的鴨子

注意:在鴨子類型中,關注點在于對象的行為,能做什麼;而不是關注對象所屬的類型。

其實我們完全可以不依賴于繼承,隻需要制造出外觀和行為相同對象,同樣可以實作不考慮對象類型而使用對象,這正是Python崇尚的“鴨子類型”(duck typing)

比起繼承的方式,鴨子類型在某種程度上實作了程式的松耦合度

ps : Python, Go 語言中實作多态可以不需要繼承父類, 而其他語言總需要(例:Java)

https://www.liaoxuefeng.com/wiki/1016959663602400/1017497232674368

https://www.cnblogs.com/guolei2570/p/8830934.html

https://www.jianshu.com/p/e97044a8169a

繼續閱讀