鸭子类型

这里的“鸭子类型”并不是真的去指代一个鸭子,而是借用鸭子来说明动态语言与静态语言的区别。对于静态类型,如果需要传入一个Animal类型,则传入的对象必须是Animal类型或者它的子类,否则将会无法调用其中的walk()方法。但是对于Python这种动态语言来说,则不一定要传入Animal类型,只需要保证传入的对象有一个walk()方法就可以了。

这就是动态语言的“鸭子类型”,它不要求严格的继承体系,一个对象如果“看起来像鸭子,走起路来像鸭子,那它就可以被看做是鸭子”。这就是“鸭子类型”的精髓。