在面向?qū)ο蟪绦蛟O(shè)計(jì)中,除了封裝和繼承特性外,多態(tài)也是一個(gè)非常重要的特性,下面詳細(xì)了解什么是多態(tài)。
我們都知道,Python是弱類型語(yǔ)言,即在使用變量時(shí),無(wú)需為其指定具體的數(shù)據(jù)類型,這就可能出現(xiàn),同一個(gè)變量會(huì)賦值不同的類對(duì)象,例如:
classBird:
defmove(self,field):
print('鳥在%s'%field)
classDog:
defmove(self,field):
print('狗在%s'%field)
a=Bird()
a.move("飛")
a=Dog()
a.move("跑")
運(yùn)行結(jié)果為:
鳥在飛
狗在跑
可以看到,a可以被先后賦值為Bird類和Dog類的對(duì)象。而在此基礎(chǔ)上,發(fā)生多態(tài)還要滿足以下2個(gè)前提條件:繼承:多態(tài)一定是發(fā)生在子類和父類之間;重寫:子類重寫了父類的方法。
因此,下面程序是對(duì)前面代碼的改寫:
classAnimal:
defmove(self,field):
print("動(dòng)物在%s"%field)
classBird(Animal):
defmove(self,field):
print('鳥在%s'%field)
classDog(Animal):
defmove(self,field):
print('狗在%s'%field)
a=Animal()
a.move("叫")
a=Bird()
a.move("飛")
a=Dog()
a.move("跑")
運(yùn)行結(jié)果為:
動(dòng)物在叫
鳥在飛
狗在跑
此程序中,Bird和Dog類都繼承自Animal類,且都各自重寫了父類的move()方法。從運(yùn)行結(jié)果可以看出,同一個(gè)變量a在執(zhí)行同一個(gè)move()方法時(shí),由于x指向的對(duì)象不同,因此實(shí)際調(diào)用的并不是同一個(gè)move()方法,這就是多態(tài)。
以上內(nèi)容為大家介紹了Python培訓(xùn)之多態(tài)是什么,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。