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