什么是鸭子类型(duck typing)
生活随笔
收集整理的這篇文章主要介紹了
什么是鸭子类型(duck typing)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自:https://blog.csdn.net/handsomekang/article/details/40270009
“當看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。”
我們并不關心對象是什么類型,到底是不是鴨子,只關心行為。
比如在python中,有很多file-like的東西,比如StringIO,GzipFile,socket。它們有很多相同的方法,我們把它們當作文件使用。
又比如list.extend()方法中,我們并不關心它的參數是不是list,只要它是可迭代的,所以它的參數可以是list/tuple/dict/字符串/生成器等.
鴨子類型在動態語言中經常使用,非常靈活,使得python不想java那樣專門去弄一大堆的設計模式。
下面例子用duck typing來實現多態。
?
再舉個栗子,
我們來hack輸出流。
?
import syssys.stdout = open('stdout.log', 'a') #只要是file-like,不管是什么類型 print 'foo'sys.stdout = sys.__stdout__ #恢復 print 'bar'這樣就把輸出流給寫入到文件中去了。
?
?
總結
以上是生活随笔為你收集整理的什么是鸭子类型(duck typing)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php json_encode不要反斜杠
- 下一篇: NHANES数据库的介绍及使用(二)