zoukankan      html  css  js  c++  java
  • Python 中的Duck Typing


            在学习Python的时候发现了鸭 子类型这个术语,听起来好像很有意思一样,所以把它记下来。
    鸭子类型(Duck Typing)的名字来源于“鸭子测试”: “当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子”这句话可以理解成这样,当一个对象A具有了对象B的特定方法,那么我们就可以说对象B也是对象A

    例如:
    (example来源于维基百科)
    class Duck:
        def quack(self): 
            print "Quaaaaaack!"
        def feathers(self): 
            print "The duck has white and gray feathers."
     
    class Person:
        def quack(self):
            print "The person imitates a duck."
        def feathers(self): 
            print "The person takes a feather from the ground and shows it."
     
    def in_the_forest(duck):
        duck.quack()
        duck.feathers()
     
    def game():
        donald = Duck()
        john = Person()
        in_the_forest(donald)
        in_the_forest(john)

    game()

             这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。可以看出,鸭子类型给予Python这样的语言以多态。 但是这种多态的实现完全由程序员来约束强制实现(文档、清晰的代码和测试),并没有语言上的约束(如C++继承和虚函数)。

             Python的“file-like object“就是一种鸭子类型。对真正的文件对象,它有一个read()方法,返回其内容。但是,许多对象,只要有read()方法,都被视为“file-like object“。许多函数接收的参数就是“file-like object“,你不一定要传入真正的文件对象,完全可以传入任何实现了read()方法的对象。
  • 相关阅读:
    VCC、VDD、VEE等区别
    Matlab运行速度/效率受哪些因素影响?
    strtok/atoi/atof/atol函数用法 详解
    双色球随机生成
    万能指针void*学习
    空指针和 指向指针的指针
    指针运算
    快速编译c/cpp文件
    贪吃蛇(C)
    判断规定时间内有无输入
  • 原文地址:https://www.cnblogs.com/cmderq/p/9130871.html
Copyright © 2011-2022 走看看