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方法 而不是因为类型不对
网友评论