多態的概念其實不難理解,它是指對不同類型的變數進行相同的操作,它會根據物件(或類別)類型的不同而表現出不同的行為。
事實上,我們常用到多態的性質,例如:
>>> 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 方法,作出不同的回應。這就是多態的魅力。
要注意喔,有了繼承,才有了多態,也會有不同類別的物件對同一訊息會作出不同的對應。
下一節