Mike的Python學院

物件導向程式設計、OOP、軟體程式設計、Google、程式語言、Python

Mike Ku

Learn Code With Mike品牌創辦人

2021/10/21

Python多型(Polymorphism)實用教學

Q:什麼是抽象方法(Abstract Method)?
要使用抽像方法(Abstract Method)的類別首先要繼承ABC(Abstract Base Class)類別,接著在抽象方法上方加上@abstractmethod裝飾詞(Decorator),並且不會有實作內容,如下範例:
from abc import ABC, abstractmethod
class Login(ABC): # 登抽象入類別
@abstractmethod
def login(self):
pass
由於抽象方法(Abstract Method)是抽象的,所以只要有抽象方法(Abstract Method)的類別就稱為抽象類別,是無法建立物件的,必須透過繼承(Inheritance)的類別來進行抽象方法(Abstract Method)的實作,如下範例:
from abc import ABC, abstractmethod
class Login(ABC): # 登入抽象類別
@abstractmethod
def login(self):
pass
class FacebookLogin(Login): # Facebook登入機制
def login(self):
print("Facebook login implementation.")
fb = FacebookLogin()
fb.login()
所以,抽象方法(Abstract Method)通常應用於定義各類別的共同介面,讓未來要增加的需求功能,必須遵守共同的規則進行實作,來達到各類別擁有一致性的介面,不但好維護且易於擴充。
Q:什麼是多型(Polymorphism)?
顧名思義,就是同一個介面或方法(Method)可以有多個實作型態。
我們來延伸上面的例子,如果今天應用程式要增加Google及Twitter的登入機制,想必大家應該知道要怎麼做了吧,就是建立各自的類別(Class)繼承(Inheritance)Login抽象類別,接著實作其中的login抽象方法(Abstract Method),如下範例:
from abc import ABC, abstractmethod
class Login(ABC): # 登入抽象類別
@abstractmethod
def login(self):
pass
class FacebookLogin(Login): # Facebook登入機
def login(self):
print("Facebook login implementation.")
class GoogleLogin(Login): #Google登入
def login(self):
print("Google login implementation.")
class TwitterLogin(Login): #Twitter登入
def login(self):
print("Twitter login implementation.")
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應用教學,歡迎前往Learn Code With Mike( https://www.learncodewithmike.com/2020/01/python-polymorphism.html )網站觀看更多精彩內容。
1 0 553 0