zoukankan      html  css  js  c++  java
  • 什么是鸭子类型(duck typing)

    “当看到一仅仅鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这仅仅鸟就能够被称为鸭子。”

    我们并不关心对象是什么类型,究竟是不是鸭子,仅仅关心行为。

    比方在python中。有非常多file-like的东西。比方StringIO,GzipFile,socket。它们有非常多同样的方法,我们把它们当作文件使用。

    又比方list.extend()方法中,我们并不关心它的參数是不是list,仅仅要它是可迭代的,所以它的參数能够是list/tuple/dict/字符串/生成器等.

    鸭子类型在动态语言中常常使用,很灵活。使得python不想java那样专门去弄一大堆的设计模式。


    以下样例用duck typing来实现多态。

    #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'
    
    这样就把输出流给写入到文件里去了。


  • 相关阅读:
    Win10 UWP Tile Generator
    Win10 BackgroundTask
    UWP Tiles
    UWP Ad
    Win10 build package error collections
    Win10 八步打通 Nuget 发布打包
    Win10 UI入门 pivot multiable DataTemplate
    Win10 UI入门 导航滑动条 求UWP工作
    UWP Control Toolkit Collections 求UWP工作
    Win10 UI入门 SliderRectangle
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7089677.html
Copyright © 2011-2022 走看看