Python 速查手冊- 6.10 多型 - 程式語言教學誌
文章推薦指數: 80 %
Python 是用鴨子型態(duck type) 的觀念來詮釋多型的,所謂鴨子型態來自美國作家的一句話,中文簡單講就是某個人看見一隻鳥,只要這隻鳥走起路來像鴨子,游泳像鴨子,叫聲 ...
Python速查手冊
6.10多型
多型(polymorphism)是物件導向程式設計(object-orientedprogramming)中第三個重要概念,所謂多型是要讓型態有更好的適用性,像是不同型態的物件都能接收到同樣的訊息,各種型態的物件(object)也都能做出各自的反應,其他程式語言可能會透過繼承(inheritance)關係或實作介面來定義多型,導致有些人誤以為Python沒有多型,事實上,多型在Python裡頭無處不在。
Python是用鴨子型態(ducktype)的觀念來詮釋多型的,所謂鴨子型態來自美國作家的一句話,中文簡單講就是某個人看見一隻鳥,只要這隻鳥走起路來像鴨子,游泳像鴨子,叫聲也像鴨子,那這個人就會叫那隻鳥為鴨子,換句話說,Python中只要有一樣的定義都可視作多型。
說這句話的美國作者是JamesWhitcombRiley,詳見維基百科Ducktest的介紹。
先來看到多型簡單的範例,Duck跟Unknown為兩個不同的類別(class),兩者定義三個相同的方法(method),分別是走路walk()、游泳swim()及發出聲音sound()
classDuck:
defwalk(self):
print("....")
defswim(self):
print("))((")
defsound(self):
print("呱呱")
classUnknown:
defwalk(self):
print(".*..")
defswim(self):
print("(())")
defsound(self):
print("哇哇")
#《程式語言教學誌》的範例程式
#http://kaiching.org/
#檔名:poly01.py
#功能:示範定義類別
#作者:張凱慶
把兩個類別的實體(instance)物件放到串列(list)d中,利用for迴圈(loop)可作相同的處理,Duck跟Unknown就是鴨子型態的呈現,Python用這種方式來詮釋多型的
frompoly01importDuck
frompoly01importUnknown
d=[Duck(),Unknown()]
foriind:
i.walk()
i.swim()
i.sound()
#《程式語言教學誌》的範例程式
#http://kaiching.org/
#檔名:poly02.py
#功能:示範定義類別
#作者:張凱慶
於命令列執行以上程式,結果如下
$python3poly02.py
....
))((
呱呱
.*..
(())
哇哇
$
再來看到像是序列(sequence)型態都有count()方法,count()回傳參數(parameter)在該序列裡的總數,例如變數(variable)a為字串(string)"12345",裡頭有一個字串"4",同樣的道理,變數b為有五個元素的串列,由於裡頭沒有字串"4",因此回傳整數0
a="12345"
b=[1,2,3,4,"5"]
print(a.count("4"))
print(b.count("4"))
#《程式語言教學誌》的範例程式
#http://kaiching.org/
#檔名:poly03.py
#功能:示範定義類別
#作者:張凱慶
於命令列執行以上程式,結果如下
$python3poly03.py
1
0
$
此外像是類別都有預設的方法,例如前後被兩條底線包圍的__str__()方法,整數11回傳11的字串形式,自行定義的類別也可自訂回傳的字串型態,例如這裡Demo()類別的__str__()方法回傳字串"Demo"
classDemo:
def__str__(self):
return"Demo"
print(Demo())
#《程式語言教學誌》的範例程式
#http://kaiching.org/
#檔名:poly04.py
#功能:示範定義類別
#作者:張凱慶
於命令列執行以上程式,結果如下
$python3poly4.py
Demo
$
相關教學影片
Python物件導向中的多型⇨YouTube頁面連結
上一頁:6.9多重繼承
Python速查手冊-目錄
下一頁:6.11__del__()
回Python教材首頁
回程式語言教材首頁
延伸文章資訊
- 1[Python物件導向]Python多型(Polymorphism)實用教學
多型(Polymorphism). 一、Python抽象方法(Abstract Method). 要使用抽像方法 ...
- 2python 多型
函數的“多型” 為多種型態,有父類別的型態,有子類別的型態子類別繼承父類別,子類別的方法跟父類別的方法相同名稱,子類別會改寫父類別的方法稱 ...
- 3Python - Class類別(4) 多型 - iT 邦幫忙
多型(polymorphism). 多型是物件導向語嚴重要的特性之一,介紹多型前先來介紹下列的名詞: · overload多載. python中其實是使用預設參數來呈現多載,我們看看下面的例子 ...
- 4Python多型(Polymorphism)實用教學- 物件導向程式設計學習
- 5【Python 教學】OOP 繼承/封裝/多型基本用法Example - 測試先生