更新時(shí)間:2022-10-19 來(lái)源:黑馬程序員 瀏覽量:
在強(qiáng)類型語(yǔ)言(例如Java或C#)中,多態(tài)是指允許使用一個(gè)父類類型的變量或常量來(lái)引用一個(gè)子類類型的對(duì)象,根據(jù)被引用子類對(duì)象特征的不同,得到不同的運(yùn)行結(jié)果。即使用父類的類型來(lái)調(diào)用子類的方法。
在Python中,多態(tài)指在不考慮對(duì)象類型的情況下使用對(duì)象。相比于強(qiáng)類型,Python更推崇“鴨子類型”?!傍喿宇愋汀笔沁@樣推斷的:如果一只生物走起路來(lái)像鴨子,游泳起來(lái)像鴨子,叫起來(lái)也像鴨子,那么它就可以當(dāng)做鴨子。也就是說(shuō),它不關(guān)注對(duì)象的類型,而是關(guān)注對(duì)象具有的行為。
例12-7 多態(tài).py
# 定義一個(gè)表示動(dòng)物的類 class Animal(object): def shout(self): # 叫的方法 print("--Animal--shout--") # 定義一個(gè)表示狗的類,繼承自動(dòng)物類 class Dog(Animal): def shout(self): # 重寫(xiě)父類的方法 print("--汪汪--") # 定義一個(gè)表示貓的類,繼承自動(dòng)物類 class Cat(Animal): def shout(self): # 重寫(xiě)父類的方法 print("--喵喵--") # 定義一個(gè)函數(shù) def func(temp): temp.shout() dog = Dog() func(dog) cat = Cat() func(cat)
在例12-7中,首先定義了Animal(動(dòng)物)類,該類中有個(gè)shout方法,其次定義了繼承自Animal的兩個(gè)子類Dog(狗)和Cat(貓),分別在兩個(gè)類中重寫(xiě)了shout方法,然后定義了一個(gè)帶參數(shù)的函數(shù)func,在該函數(shù)中調(diào)用了shout方法,最后分別創(chuàng)建了Dog類的對(duì)象dog和Cat類的對(duì)象cat,并作為參數(shù)調(diào)用了func函數(shù)。
程序運(yùn)行的結(jié)果如圖12-12所示。
圖12-12 運(yùn)行結(jié)果
值得一提的是,func函數(shù)中沒(méi)有規(guī)定參數(shù)temp類型,它可以接收任意類型的對(duì)象,但是傳入的這些對(duì)象中必須有shout方法。