Python 3.1 快速導覽 - 類別 多型

多型 (polymorphism) 是物件導向程式語言 (object-oriented programming language) 的一項主要特性,使物件 (object) 的使用更具彈性。簡單來說,多型可使物件的型態具有通用的效力,例如以下程式

class Demo:
    def __init__(self, i):
        self.i = i
    
    def __str__(self):
        return str(self.i)
         
    def hello(self):
        print("hello " + self.__str__())

class SubDemo1(Demo):
    def __init__(self, i, j):
        super().__init__(i)
        self.j = j
    
    def __str__(self):
        return super().__str__() + str(self.j)

class SubDemo2(Demo):
    def __init__(self, i, j):
        super().__init__(i)
        self.j = j
        self.k = str(self.i) + str(self.j)
    
    def __str__(self):
        return self.k

a = SubDemo1(22, 33)
b = SubDemo2(44, "55")
a.hello()
b.hello()

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:poly01.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行結果如下



SubDemo1 與 SubDemo2 繼承 (inherit) 自 Demo ,因此兩個子類別也都繼承了 hello() 方法 (method) ,雖然 SubDemo1 與 SubDemo2 所建立的物件各自是不同型態,然而由繼承關係兩種型態可通用 hello() 。


其他的例子如
d1 = "12345"
d2 = [1, 2, 3, 4, "5"]  
print(d1.count("4"))
print(d2.count("4"))

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:poly02.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月


執行結果如下



d1 為字串 (string) , d2 為串列 (list) ,兩者皆屬於序列 (sequence) 的複合資料型態 (compound data type) ,有通用的 count() 方法,可計算某元素 (element) 累計出現的次數。


多型的應用很多,例如串列中可接受不同型態的物件當元素,或是方法可用不同型態的參數等。


中英文術語對照
多型polymorphism
物件導向程式語言object-oriented programming language
物件object
繼承inherit
方法method
字串string
串列list
序列sequence
複合資料型態compound data type
元素element






沒有留言: