類的多態(tài)

多態(tài)是面向對象的又一重要概念,字面意義就是“多種狀態(tài)”。在程序中不需要區(qū)分引用對象,用相同的調用方法,完成引用對象的功能而表現(xiàn)出多種狀態(tài)。有了多態(tài),就不需要為每個具體的子類編寫功能調用,是一種泛型編程。如果你是一個公司的后勤經(jīng)理,需要打掃地面,不論是掃地機器人還是清潔工,你只要告訴他打掃的范圍,他們就可以完成打掃的任務。
在一些語言中需要使用繼承、接口、不同參數(shù)方法來實現(xiàn)多態(tài)。由于Python是動態(tài)語言,其實現(xiàn)的基本方式稱為“鴨子類型”(duck typing)。即"當看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。"在Python的調用語義中,只要調用對象具有所調用的屬性,那么不管調用對象是什么類型,就可以調用成功。
在維基百科的詞條(https://en.wikipedia.org/wiki/Duck_typing)中示例代碼如下:

class Duck:
    def fly(self):
        print("Duck flying")

class Airplane:
    def fly(self):
        print("Airplane flying")

class Whale:
    def swim(self):
        print("Whale swimming")

def lift_off(entity):
    entity.fly()

duck = Duck()
airplane = Airplane()
whale = Whale()

lift_off(duck) # prints `Duck flying`
lift_off(airplane) # prints `Airplane flying`
lift_off(whale) # Throws the error `'Whale' object has no attribute 'fly'`

在函數(shù)lift_off()中對傳入的entity調用了fly()方法,傳入函數(shù)的是什么對象類型,只要entity引用的對象包括fly()方法,就可以成功調用,如lift_off(duck)、lift_off(airplane)。而第三次調用時,即lift_off(whale),傳入的是Whale類的實例,其不具有fly()屬性,因此調用就會失敗。
正是因為Python的這種特性,降低了Python實現(xiàn)多態(tài)的難度,提高了多態(tài)實現(xiàn)的靈活性。所以在一些Python的面向對象程序資料中,對多態(tài)的介紹僅限于此。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • # 第一優(yōu)先級規(guī)則聲明: # 除了夢境,每一個意識主進程都必須與一個身體參與的機械進程相匹配,否則結束意識主進程。...
    李洞BarryLi閱讀 4,202評論 0 1
  • 1/579文件IO文件介紹I/O流流的概念讀寫文件文件備份IO介紹大家應該聽說過一句話:“好記性不如爛筆頭”。不僅...
    清清子衿木子水心閱讀 1,561評論 0 1
  • python與鴨子類型 調用不同的子類將會產(chǎn)生不同的行為,而無須明確知道這個子類實際上是什么,這是多態(tài)的重要應用場...
    JasonDing閱讀 8,750評論 0 15

友情鏈接更多精彩內(nèi)容