Python多型(Polymorphism)實用教學 - 快樂學程式
文章推薦指數: 80 %
多型(Polymorphism). 一、Python抽象方法(Abstract Method). 要使用抽像方法(Abstract Method)的類別首先 ...
HitentertosearchorESCtoclosePython初學程式Python多型(Polymorphism)實用教學By學程式助教January15,2020October13th,2020NoComments今天要來介紹的Python多型(Polymorphism)在物件導向設計中非常的重要,不論是設計模式(DesignPatterns)或設計原則(DesignPrinciples),都會有多型(Polymorphism)的概念。
使用多型(Polymorphism)來設計類別架構,能夠讓程式碼的相依性不會那麼高,並且透過統一的介面來彈性擴充功能。
今天主要的重點有兩個部分:Python抽象方法(AbstractMethod)多型(Polymorphism)一、Python抽象方法(AbstractMethod)要使用抽像方法(AbstractMethod)的類別首先要繼承ABC(AbstractBaseClass)類別,接著在抽象方法上方加上@abstractmethod裝飾詞(Decorator),並且不會有實作內容,如下範例:由於抽象方法(AbstractMethod)是抽象的,所以只要有抽象方法(AbstractMethod)的類別就稱為抽象類別,是無法建立物件的,如下範例:執行結果錯誤訊息顯示無法實體化含有抽象方法(AbstractMethod)的抽象類別。
必須透過繼承(Inheritance)的類別來進行抽象方法(AbstractMethod)的實作,如下範例:執行結果如果繼承(Inheritance)的類別(Class)沒有實作抽象類別中的抽象方法(AbstractMethod),同樣視為抽象類別,也無法建立物件(Object)。
範例中,FacebookLogin類別繼承(Inheritance)Login抽象類別,並且實作其login()抽象方法(AbstractMethod),即可建立物件進行呼叫的動作。
所以,抽象方法(AbstractMethod)通常應用於定義各類別的共同介面,讓未來要增加的需求功能,必須遵守共同的規則進行實作,來達到各類別擁有一致性的介面,不但好維護且易於擴充。
二、多型(Polymorphism)顧名思義,就是同一個介面或方法(Method)可以有多個實作型態。
我們來延伸上面的例子,如果今天應用程式要增加Google及Twitter的登入機制,想必大家應該知道要怎麼做了吧,就是建立各自的類別(Class)繼承(Inheritance)Login抽象類別,接著實作其中的login抽象方法(AbstractMethod),如下範例:執行結果各位有沒有發現,來源端不同的類別物件(Object)呼叫同樣的方法(Method)時,卻可以有不同的實作方式,這也就是所謂的多型(Polymorphism)。
其中的原理,就是Python編譯器在執行期間(Runtime)看到三個實體類別(Class)皆繼承(Inheritance)了Login抽象類別,接著在物件(Object)呼叫login()方法(Method)時,Python編譯器則依據呼叫物件(Object)的實體類別(Class)來執行相應的類別實作。
另外,在Python繼承(Inheritance)實用教學中有提到方法覆寫(MethodOverriding)的概念,其實就是多型(Polymorphism)的展現,如下範例:執行結果同樣可以看到來源端不同的類別物件(Object)呼叫同一個方法(Method),而有不一樣的實作。
就是由於子類別(SubClass)都覆寫(MethodOverriding)了父類別(BaseClass)的drive()共同方法(Method),使得Python編譯器在執行期間(Runtime),則依據呼叫端物件(Object)的實體類別(Class)來決定要執行哪一個子類別(SubClass)的實作內容。
使用多型(Polymorphism)最大的優點就是易於擴充及降低類別間的相依性。
從這兩個例子可以看到,不論未來要再增加新的登入機制或交通工具,都能非常容易的透過新增類別來進行擴充,並且有一致性的介面。
也由於各類別依據共同介面來各自實作,所以類別間的相依性降低,在新增需求功能時,不用擔心會影響到其他類別的實作。
三、小結以上就是Python抽象方法(AbstractMethod)及物件導向的多型(Polymorphism)概念,希望看完這篇教學後,能夠設計出有彈性的架構來面對實務上各種千變萬化的需求。
有句話說:開發是一時的,維護是一輩子的,擁有易擴充且好維護的架構非常重要,Python的繼承(Inheritance)讓程式碼的重用性(Reusable)提高,而多型(Polymorphism)概念則讓各類別有一致性的介面,易於擴充及維護。
蝦皮資深工程師來襲🤩,立即點擊圖片獲得更多資訊👆精彩內容預告:機器學習實作(新手友善)、ChromeExtension擴充套件 「好文轉自古耕全–Python多型(Polymorphism)實用教學,如果你喜歡他的文章歡迎回到他的部落格看更多:)」Tags:PolymorphismPython多型學程式助教熱門貼文發燒學習代表三個你不能錯過的教學資訊July21,2021線上教學沒有臨場感?Gather來幫你解決July16,2021HTML入門系列:基本觀念介紹!April21,2021HTML語法整理!3分鐘快速弄懂常用語法!April21,2021系統化入門程式教學盡在Udemy平台快樂學程式PreviousPostPython封裝(Encapsulation)實用教學NextPost學程式主題小聚–【區塊鏈懂不懂】RecommendedForYouHTML初學程式程式新手網頁前端HTML入門系列:基本觀念介紹!jingApril21,2021HTML初學程式程式新手網頁前端HTML語法整理!3分鐘快速弄懂常用語法!jingApril21,2021PHP初學程式程式新手PHP是什麼?3分鐘PHP基本介紹!jingApril21,2021ShareTweetSharePinFollowUs©2022快樂學程式.
延伸文章資訊
- 1python 多型
函數的“多型” 為多種型態,有父類別的型態,有子類別的型態子類別繼承父類別,子類別的方法跟父類別的方法相同名稱,子類別會改寫父類別的方法稱 ...
- 2Python多型(Polymorphism)實用教學- 物件導向程式設計學習
- 3Python多型(Polymorphism)實用教學 - 快樂學程式
多型(Polymorphism). 一、Python抽象方法(Abstract Method). 要使用抽像方法(Abstract Method)的類別首先 ...
- 4python極簡教程07:封裝、多型和繼承 - IT人
測試奇譚,BUG不見。這一場主講python的物件導向部分——封裝、多型和繼承。目的:掌握Python物件導向的三個核心概念。封裝01 什麼是封裝?
- 5[Python教學]物件導向-Class類的封裝/繼承/多型 - MAX行銷誌
[Python教學] 物件導向-Class類的封裝/繼承/多型 · 首先用Class 來定義類別 · OOP 特性一. 繼承(inheritance) · OOP 特性二. 封裝(encapsu...