Python多型(Polymorphism)實用教學- 物件導向程式設計學習
文章推薦指數: 80 %
Q:什麼是抽象方法(Abstract Method)? 要使用抽像方法(Abstract Method)的類別首先要繼承ABC(Abstract Base Class)類別,接著在抽象方法上方加上@a...
我的教室
教室設定
創建教室
創建教室
創建教室
創建教室
Python多型(Polymorphism)實用教學
Mike的Python學院
關注
MikeKu
LearnCodeWithMike品牌創辦人
2021/10/21
Python多型(Polymorphism)實用教學
Q:什麼是抽象方法(AbstractMethod)?要使用抽像方法(AbstractMethod)的類別首先要繼承ABC(AbstractBaseClass)類別,接著在抽象方法上方加上@abstractmethod裝飾詞(Decorator),並且不會有實作內容,如下範例:fromabcimportABC,abstractmethodclassLogin(ABC):#登抽象入類別@abstractmethoddeflogin(self):pass由於抽象方法(AbstractMethod)是抽象的,所以只要有抽象方法(AbstractMethod)的類別就稱為抽象類別,是無法建立物件的,必須透過繼承(Inheritance)的類別來進行抽象方法(AbstractMethod)的實作,如下範例:fromabcimportABC,abstractmethodclassLogin(ABC):#登入抽象類別@abstractmethoddeflogin(self):passclassFacebookLogin(Login):#Facebook登入機制deflogin(self):print("Facebookloginimplementation.")fb=FacebookLogin()fb.login()所以,抽象方法(AbstractMethod)通常應用於定義各類別的共同介面,讓未來要增加的需求功能,必須遵守共同的規則進行實作,來達到各類別擁有一致性的介面,不但好維護且易於擴充。
Q:什麼是多型(Polymorphism)?顧名思義,就是同一個介面或方法(Method)可以有多個實作型態。
我們來延伸上面的例子,如果今天應用程式要增加Google及Twitter的登入機制,想必大家應該知道要怎麼做了吧,就是建立各自的類別(Class)繼承(Inheritance)Login抽象類別,接著實作其中的login抽象方法(AbstractMethod),如下範例:fromabcimportABC,abstractmethodclassLogin(ABC):#登入抽象類別@abstractmethoddeflogin(self):passclassFacebookLogin(Login):#Facebook登入機deflogin(self):print("Facebookloginimplementation.")classGoogleLogin(Login):#Google登入deflogin(self):print("Googleloginimplementation.")classTwitterLogin(Login):#Twitter登入deflogin(self):print("Twitterloginimplementation.")fb=FacebookLogin()fb.login()google=GoogleLogin()google.login()twitter=TwitterLogin()twitter.login()各位有沒有發現,來源端不同的類別物件(Object)呼叫同樣的方法(Method)時,卻可以有不同的實作方式,這也就是所謂的多型(Polymorphism)。
其中的原理,就是Python編譯器在執行期間(Runtime)看到三個實體類別(Class)皆繼承(Inheritance)了Login抽象類別,接著在物件(Object)呼叫login()方法(Method)時,Python編譯器則依據呼叫物件(Object)的實體類別(Class)來執行相應的類別實作。
Q:使用多型(Polymorphism)有什麼優點?使用多型(Polymorphism)最大的優點就是易於擴充及降低類別間的相依性。
從這兩個例子可以看到,不論未來要再增加新的登入機制或交通工具,都能非常容易的透過新增類別來進行擴充,並且有一致性的介面。
如果想要學習更多的Python應用教學,歡迎前往LearnCodeWithMike(https://www.learncodewithmike.com/2020/01/python-polymorphism.html
)網站觀看更多精彩內容。
GoogleOOPPython物件導向程式設計程式語言軟體程式設計learncodewithmike.com
[Python物件導向]Python多型(Polymorphism)實用教學
GoogleOOPPython物件導向程式設計程式語言軟體程式設計1
0
2430拍手留言分享分享到:LineFacebookTwitter複製連結取消
收藏
更多內容來自Mike的Python學院
Mike與104學習精靈合作,在這邊分享LearnCodeWithMike網站上部分的Python「入門教學、爬蟲應用、資料分析與網頁開發」等主題的教學文章,而這也是LearnCodeWithMike品牌的初衷,以簡單易懂的實作幫助大家學習Python程式語言。
關注
延伸文章資訊
- 1Fluent Python 讀書筆記(四) - Super9
「抽象類別代表介面」; Python 自2.6 版本之後加入ABC (abstact base class),大多被定義在 collections.abc 模組; 當你需要實作介面時,第一步是將...
- 2Python :: 共同行為與is a
抽象類別/方法
- 3abc — 抽象類別— 你所不知道的Python 標準函式庫用法03
使用Python abc 套件的原因,是為了要解決Python 沒有「抽象類別(abstract class)」的問題。透過抽象類別,我們可以建立一個比起使用hasattr() 還要更 ...
- 4抽象類別Abstract Class - 工程師的呢喃
一個類別中有一個或一個以上的abstract method,那就數於abstract class。 抽象方法:只有內容沒有實作的方法。 from abc import ABCMeta, abst...
- 5[Day 13] 談談抽象這件事 - iT 邦幫忙
在Python 並沒有像Java、Scala 直接有abstract class 這樣的關鍵字來宣告抽象類別,而是透過宣告metaclass ABCMeta 來達到這件事情。什麼是metacla...