亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

下面例子用duck typing來實(shí)現(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__ #恢復(fù) 
print 'bar' 

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

相關(guān)文章

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

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

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

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

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

    Tensorflow訓(xùn)練模型越來越慢的2種解決方案

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

    Python實(shí)現(xiàn)的插入排序,冒泡排序,快速排序,選擇排序算法示例

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

    python通過百度地圖API獲取某地址的經(jīng)緯度詳解

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

    如何快速理解python的垃圾回收機(jī)制

    在本篇內(nèi)容里小編給各位分享的是一篇關(guān)于如何快速理解python的垃圾回收機(jī)制的相關(guān)知識點(diǎn)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-09-09
  • Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法

    Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法

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

    Python發(fā)展史及網(wǎng)絡(luò)爬蟲

    Python 是一個高層次的結(jié)合了解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言。這篇文章給大家介紹了python發(fā)展史及網(wǎng)絡(luò)爬蟲知識,感興趣的朋友跟隨小編一起看看吧
    2019-06-06
  • 使用Python實(shí)現(xiàn)在Windows下安裝Django

    使用Python實(shí)現(xiàn)在Windows下安裝Django

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

    用Python實(shí)現(xiàn)一個簡單的能夠上傳下載的HTTP服務(wù)器

    這篇文章主要介紹了用Python實(shí)現(xiàn)一個簡單的能夠上傳下載的HTTP服務(wù)器,是Python網(wǎng)絡(luò)編程學(xué)習(xí)當(dāng)中的基礎(chǔ),本文示例基于Windows操作系統(tǒng)實(shí)現(xiàn),需要的朋友可以參考下
    2015-05-05

最新評論