帮你举例说明什么是Python鸭子类型
學習python的時候,也知道鴨子類型(ducking typing)這個說法,“當你看到一只鳥走起來像鴨子,游泳起來鴨子,叫起來也像鴨子,那么這只鳥就被稱為鴨子類型”,字面上理解了,但是在Python中是如何體驗的?這一點還真不太懂。今天在看書,又再次碰到這個玩意,于是決定把這個鴨子類型給整明白。
按照書上的解釋,鴨子類型是多態一種形式,這這種形式中,不管對象屬于哪個類,也不管聲明的具體接口是什么,只要對象實現了相應的方法,函數就可以在對象上執行操作。好吧,這句話如何理解呢?我們開始吧!
簡單理解什么是多態?
首先要理解什么是多態,故名思意,多態就是多種狀態,不同的對象調用出同一個接口,表現出多種狀態。看示例1。
#示例1 class Animal():def who(self):print("I am an Animal") class Duck(Animal):def who(self):print("I am a duck")class Dog(Animal):def who(self):print("I am a dog")class Cat(Animal):def who(self):print("I am a cat") if __name__ == "__main__":duck=Duck()dog=Dog()cat=Cat()duck.who()dog.who()cat.who()在示例1中,我們定義了duck,dog和cat三個對象,每個對象都實現了who()方法。你看,他們的接口名稱都是相同的,他們分別調用who()方法,但有有不同的輸出,不同的表現。以下是輸出結果:
I am a duck I am a dog I am a cat好了,多態大概就是這么回事了。更詳細的解釋留在以后的文章吧!
鴨子類型
其實一般不會像上面那樣去使用多態,更加優雅的寫法見示例2。
#示例2 #此處省略Animal,Duck,Dog,cat的實現def func(obj):obj.who()if __name__ == "__main__":duck=Duck()dog=Dog()cat=Cat()func(duck)func(dog)func(cat)示例2中定義一個函數func(),這個函數對參數有一個要求,那就是參數必須有who()這個方法。不管你是什么對象,是duck對象也好,是dog對象也罷,只管對象實現who()方法就可。這就是鴨子類型,它根本不管你是什么對象,只要你有這個方法,有這個行為,表現得像鴨子,走起來像鴨子,游泳起來鴨子,叫起來也像鴨子,那么盡管你是一只會飛天的豬,也是稱為鴨子類型。
好了,以上就是小編對鴨子類型的理解,如果你有不同的建議,就聯系小編一起討論吧。
歡迎關注公眾號:CVpython,一個專注于分享Python教程和CV算法的公眾號,歡迎來撩
總結
以上是生活随笔為你收集整理的帮你举例说明什么是Python鸭子类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kinetis FTM 分析笔记
- 下一篇: 数据结构习题及解析二