欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解duck typing鴨子類型程序設計與Python的實現示例

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

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

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

下面例子用duck typing來實現多態(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' 

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

相關文章

  • Python+pyecharts繪制交互式可視化圖表

    Python+pyecharts繪制交互式可視化圖表

    本文我們來了解一個新的可視化模塊pyecharts,并且利用該模塊繪制讓數據變成優(yōu)美的交互式可視化圖表,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-04-04
  • 發(fā)布你的Python模塊詳解

    發(fā)布你的Python模塊詳解

    這篇文章主要介紹了發(fā)布你的Python模塊詳解的相關資料,需要的朋友可以參考下
    2016-09-09
  • Tensorflow訓練模型越來越慢的2種解決方案

    Tensorflow訓練模型越來越慢的2種解決方案

    今天小編就為大家分享一篇Tensorflow訓練模型越來越慢的2種解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python實現的插入排序,冒泡排序,快速排序,選擇排序算法示例

    Python實現的插入排序,冒泡排序,快速排序,選擇排序算法示例

    這篇文章主要介紹了Python實現的插入排序,冒泡排序,快速排序,選擇排序算法,結合實例形式總結分析了Python插入排序,冒泡排序,快速排序,選擇排序等算法的實現與使用技巧,需要的朋友可以參考下
    2019-05-05
  • python通過百度地圖API獲取某地址的經緯度詳解

    python通過百度地圖API獲取某地址的經緯度詳解

    這篇文章主要給大家介紹了關于python通過百度地圖API獲取某地址的經緯度的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • 如何快速理解python的垃圾回收機制

    如何快速理解python的垃圾回收機制

    在本篇內容里小編給各位分享的是一篇關于如何快速理解python的垃圾回收機制的相關知識點內容,需要的朋友們可以學習下。
    2020-09-09
  • Python獲取數據庫數據并保存在excel表格中的方法

    Python獲取數據庫數據并保存在excel表格中的方法

    今天小編就為大家分享一篇Python獲取數據庫數據并保存在excel表格中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python發(fā)展史及網絡爬蟲

    Python發(fā)展史及網絡爬蟲

    Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。這篇文章給大家介紹了python發(fā)展史及網絡爬蟲知識,感興趣的朋友跟隨小編一起看看吧
    2019-06-06
  • 使用Python實現在Windows下安裝Django

    使用Python實現在Windows下安裝Django

    今天小編就為大家分享一篇關于使用Python實現在Windows下安裝Django,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 用Python實現一個簡單的能夠上傳下載的HTTP服務器

    用Python實現一個簡單的能夠上傳下載的HTTP服務器

    這篇文章主要介紹了用Python實現一個簡單的能夠上傳下載的HTTP服務器,是Python網絡編程學習當中的基礎,本文示例基于Windows操作系統實現,需要的朋友可以參考下
    2015-05-05

最新評論