duck type

作者: grimlock44 | 来源:发表于2018-09-20 15:35 被阅读0次

    duck typing
    俚语:如果一个东西像鸭子一样走路和呱呱叫,那么它一定是鸭子

    计算机领域中,duck typing相对应的是normal typing(对象的类型决定了对象的特性),duck typing中对象的类型不重要,只要对象有类型A的方法和属性,那么它被当做类型A来使用。熟悉c的同学应该明白c就是normal typing,在编译阶段静态检查,函数定义和传参类型不一致就报错。对应的python属于duck typing,基本上是类型随便混用,没有静态检查类型匹配情况,只有运行起来找不到相应属性和方法时才报错。

    python的例子:任何类型的对象可以用在任何上下文中,只有方法找不到了才报错
    class Duck:
    def fly(self):
    print("Duck flying")

    class Airplane:
    def fly(self):
    print("Airplane flying")

    class Whale:
    def swim(self):
    print("Whale swimming")

    def lift_off(entity):
    entity.fly()

    duck = Duck()
    airplane = Airplane()
    whale = Whale()

    lift_off(duck) # prints Duck flying 有fly方法就能用 不关心类型是什么
    lift_off(airplane) # prints Airplane flying 有fly方法就能用 不关心类型是什么
    lift_off(whale) # Throws the error 'Whale' object has no attribute 'fly' 异常是因为没有fly方法 而不是因为类型不对

    相关文章

      网友评论

          本文标题:duck type

          本文链接:https://www.haomeiwen.com/subject/vilnnftx.html