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