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

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

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

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

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

下面例子用duck typing來(lái)實(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) 

再舉個(gè)栗子,
我們來(lái)hack輸出流。

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

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

相關(guān)文章

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

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

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

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

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

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

    今天小編就為大家分享一篇Tensorflow訓(xùn)練模型越來(lái)越慢的2種解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    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通過(guò)百度地圖API獲取某地址的經(jīng)緯度詳解

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論