類別的多型

多態的概念其實不難理解,它是指對不同類型的變數進行相同的操作,它會根據物件(或類別)類型的不同而表現出不同的行為。

事實上,我們常用到多態的性質,例如:

>>> 1 + 2
3
>>> 'a' + 'b'
'ab'

可以看到,我們對兩個整數進行操作,會傳回它們的和,對兩個字元進行相同的操作,會傳回拼接後的字串。也就是說,不同類型的物件對同一訊息會作出不同的回應。

看下面的實例,來了解多態:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class User(object):
    def __init__(self, name):
        self.name = name
    def printUser(self):
        print('Hello !' + self.name)
class UserVip(User):
    def printUser(self):
        print('Hello ! 尊敬的Vip用户:' + self.name)
class UserGeneral(User):
    def printUser(self):
        print('Hello ! 尊敬的用户:' + self.name)
def printUserInfo(user):
    user.printUser()
if __name__ == '__main__':
    userVip = UserVip('两点水')
    printUserInfo(userVip)
    userGeneral = UserGeneral('水水水')
    printUserInfo(userGeneral)

輸出的結果:

Hello ! 尊敬的Vip用户:两点水
Hello ! 尊敬的用户:水水水

可以看到,userVip 和userGeneral 是兩個不同的對象,對它們呼叫printUserInfo 方法,它們會自動呼叫實際類型的printUser 方法,作出不同的回應。這就是多態的魅力。

要注意喔,有了繼承,才有了多態,也會有不同類別的物件對同一訊息會作出不同的對應。

繼續學習