![](../../img/interpret.jpg)
Python 簡易手冊
單元 64 - 多型
Python 是物件導向程式語言 (object-oriented programming language) ,物件導向程式設計 (object-oriented programming) 有三大特性,分別是封裝 (encapsulation) 、繼承 (inheritance) 與多型 (polymorphism) 。所謂多型是要讓型態具有通用性,傳統物件導向程式語言夠過繼承關係,讓父類別可以當作子類別的通用型態,但是 Python 的類別是依資料模型來設計的,坦白說這樣讓 Python 的多型無處不在,像是序列有相同的操作方式,這就是 Python 詮釋多型的方式,叫做鴨子型態 (duck-typing) 。
鴨子型態的精髓是只要一隻動物,走路看起來像鴨子,游泳看起來像鴨子,叫聲聽起來像鴨子,那這隻動物就會播認定為鴨子。同樣的,只要多個類別類定義相同的操作方式,那些類別都可以被歸為同一類,就像是序列 (sequence) 有序對 (tuple) 、字串 (string) 、串列 (list) 等多種不同資料型態 (data type) 。
簡單舉自行定義鴨子型態的例子如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 定義第一個鴨子類別 class Demo: def do_something(self): print("There is no spoon.") # 定義第二個鴨子類別 class Demo2: def do_something(self): print("Free your mind.") # 處理鴨子串列 for i in [Demo(), Demo2()]: i.do_something() # 檔名: class_demo29.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 54 - 類別介紹類別 (class) 的基本概念,單元 61 - 封裝會介紹物件導向程式設計的第一項特性 - 封裝,單元 62 - 繼承會介紹物件導向程式設計的第二項特性 - 繼承,單元 55 - 實體屬性與方法介紹如何定義實體屬性及實體方法,單元 23 - for 陳述介紹如何使用 for 迴圈 (loop) ,單元 39 - 串列介紹如何使用串列資料型態。
在這個例子中, Demo 與 Demo2 都定義了 do_something() 方法 (method) ,這讓這兩個鴨子類別可以進行相同的操作,例如這裡放在 for 迴圈 (loop) 中,然後依次呼叫 do_something() ,執行結果如下
> python class_demo29.py |
There is no spoon. Free your mind. |
> |
參考資料
![](../../img/pydoing.gif)