duck type

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)