最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解duck typing鴨子類型程序設(shè)計與Python的實現(xiàn)示例

 更新時間:2016年06月03日 17:18:09   作者:mattkang  
這篇文章主要介紹了詳解duck typing鴨子類型程序設(shè)計與Python的實現(xiàn)示例,鴨子類型特指解釋型語言中的一種編程風格,需要的朋友可以參考下

在程序設(shè)計中,鴨子類型(英語:duck typing)是動態(tài)類型的一種風格。在這種風格中,一個對象有效的語義,不是由繼承自特定的類或?qū)崿F(xiàn)特定的接口,而是由當前方法和屬性的集合決定。
這個概念的名字來源于由James Whitcomb Riley提出的鴨子測試,“鴨子測試”可以這樣表述:
“當看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子?!?br /> 在鴨子類型中,關(guān)注的不是對象的類型本身,而是它是如何使用的。例如,在不使用鴨子類型的語言中,我們可以編寫一個函數(shù),它接受一個類型為鴨的對象,并調(diào)用它的走和叫方法。在使用鴨子類型的語言中,這樣的一個函數(shù)可以接受一個任意類型的對象,并調(diào)用它的走和叫方法。如果這些需要被調(diào)用的方法不存在,那么將引發(fā)一個運行時錯誤。任何擁有這樣的正確的走和叫方法的對象都可被函數(shù)接受的這種行為引出了以上表述,這種決定類型的方式因此得名。
鴨子類型通常得益于不測試方法和函數(shù)中參數(shù)的類型,而是依賴文檔、清晰的代碼和測試來確保正確使用。從靜態(tài)類型語言轉(zhuǎn)向動態(tài)類型語言的用戶通常試圖添加一些靜態(tài)的(在運行之前的)類型檢查,從而影響了鴨子類型的益處和可伸縮性,并約束了語言的動態(tài)特性。

Python代碼示例
上面這樣說可能太空洞了。比如在Python中,有很多file-like的東西,比如StringIO,GzipFile,socket。它們有很多相同的方法,我們把它們當作文件使用。
又比如list.extend()方法中,我們并不關(guān)心它的參數(shù)是不是list,只要它是可迭代的,所以它的參數(shù)可以是list/tuple/dict/字符串/生成器等.
鴨子類型在動態(tài)語言中經(jīng)常使用,非常靈活,使得python不想java那樣專門去弄一大堆的設(shè)計模式。

下面例子用duck typing來實現(xiàn)多態(tài)。

#coding=utf-8 
class Duck: 
  def quack(self): 
    print "Quaaaaaack!" 
 
class Bird: 
  def quack(self): 
    print "bird imitate duck." 
 
class Doge: 
  def quack(self): 
    print "doge imitate duck." 
 
def in_the_forest(duck): 
  duck.quack() 
 
duck = Duck() 
bird = Bird() 
doge = Doge() 
for x in [duck, bird, doge]: 
  in_the_forest(x) 

再舉個栗子,
我們來hack輸出流。

import sys 
 
sys.stdout = open('stdout.log', 'a') #只要是file-like,不管是什么類型 
print 'foo' 
 
sys.stdout = sys.__stdout__ #恢復 
print 'bar' 

這樣就把輸出流給寫入到文件中去了。

相關(guān)文章

  • Python實現(xiàn)Excel做表自動化的最全方法合集

    Python實現(xiàn)Excel做表自動化的最全方法合集

    Microsoft?Excel?是一款強大的辦公工具,廣泛用于數(shù)據(jù)分析、報告制作、預算管理等各種任務(wù),本文將深入探討如何使用?Python?進行?Excel?表格的自動化,需要的可以參考下
    2024-02-02
  • python實現(xiàn)圖像拼接

    python實現(xiàn)圖像拼接

    這篇文章主要為大家詳細介紹了python實現(xiàn)圖像拼接,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • tensorflow 實現(xiàn)打印pb模型的所有節(jié)點

    tensorflow 實現(xiàn)打印pb模型的所有節(jié)點

    今天小編就為大家分享一篇tensorflow 實現(xiàn)打印pb模型的所有節(jié)點,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python lambda表達式(匿名函數(shù))寫法解析

    python lambda表達式(匿名函數(shù))寫法解析

    這篇文章主要介紹了python lambda表達式(匿名函數(shù))寫法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 解決Keras 自定義層時遇到版本的問題

    解決Keras 自定義層時遇到版本的問題

    這篇文章主要介紹了解決Keras 自定義層時遇到版本的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python根據(jù)出生日期獲得年齡的方法

    python根據(jù)出生日期獲得年齡的方法

    這篇文章主要介紹了python根據(jù)出生日期獲得年齡的方法,涉及Python操作日期的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • python中使用(.)進行相對路徑訪問文件的操作方法

    python中使用(.)進行相對路徑訪問文件的操作方法

    在Python中,使用相對路徑訪問文件是一種常見的做法,尤其是在處理與腳本位于同一目錄或附近目錄的文件時,這篇文章主要介紹了python中使用(.)來進行相對路徑訪問文件,需要的朋友可以參考下
    2024-05-05
  • django foreignkey(外鍵)的實現(xiàn)

    django foreignkey(外鍵)的實現(xiàn)

    這篇文章主要介紹了django foreignkey(外鍵)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • TensorFlow2.X使用圖片制作簡單的數(shù)據(jù)集訓練模型

    TensorFlow2.X使用圖片制作簡單的數(shù)據(jù)集訓練模型

    這篇文章主要介紹了TensorFlow2.X使用圖片制作簡單的數(shù)據(jù)集訓練模型,本文通過截圖實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Python繪制趨勢線的示例代碼

    Python繪制趨勢線的示例代碼

    趨勢線是用來顯示數(shù)據(jù)趨勢或者預測未來發(fā)展方向的一種圖形表示方法,這篇文章主要為大家詳細介紹了如何使用Python繪制趨勢線,需要的可以了解下
    2024-03-03

最新評論

双辽市| 视频| 肥乡县| 荣成市| 晋中市| 前郭尔| 高淳县| 宜州市| 抚宁县| 红原县| 富阳市| 邓州市| 松原市| 镇巴县| 鞍山市| 泊头市| 八宿县| 峡江县| 孝感市| 苗栗市| 哈密市| 武威市| 景谷| 辽中县| 甘泉县| 册亨县| 九龙县| 嘉善县| 阿城市| 宜昌市| 平利县| 龙江县| 永新县| 老河口市| 靖远县| 平罗县| 宁远县| 城步| 吕梁市| 宣化县| 泗洪县|