多態(tài)的概念其實不難理解,它是指對不同類型的變量進(jìn)行相同的操作,它會根據(jù)對象(或類)類型的不同而表現(xiàn)出不同的行為。
事實上,我們經(jīng)常用到多態(tài)的性質(zhì),比如:
>>> 1 + 2
3
>>> 'a' + 'b'
'ab'
可以看到,我們對兩個整數(shù)進(jìn)行 + 操作,會返回它們的和,對兩個字符進(jìn)行相同的 + 操作,會返回拼接后的字符串。也就是說,不同類型的對象對同一消息會作出不同的響應(yīng)。
看下面的實例,來了解多態(tài):
#!/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)
輸出的結(jié)果:
Hello ! 尊敬的Vip用戶:兩點水
Hello ! 尊敬的用戶:水水水
可以看到,userVip 和 userGeneral 是兩個不同的對象,對它們調(diào)用 printUserInfo 方法,它們會自動調(diào)用實際類型的 printUser 方法,作出不同的響應(yīng)。這就是多態(tài)的魅力。
要注意喔,有了繼承,才有了多態(tài),也會有不同類的對象對同一消息會作出不同的相應(yīng)。
最后,本章的所有代碼都可以在 https://github.com/TwoWater/Python 上面找到,文章的內(nèi)容和源文件都放在上面。同步更新到 Gitbooks。