最近在学习流畅的Python一书时,经常看到这样的名词”鸭子类型”.而对它的解释是:一只鸟如果长得像鸭子,走路像鸭子,游泳也像鸭子,那么它可以认为就是一只鸭子.
这句话乍看起来有些无厘头.于是看了下大家对鸭子类型的解释,总结如下:
上面标粗的这句话表明一件事:只关注的该对象的行为,而不关注该对象的类型.这是Python的特点,是一门动态语言.
Python默认鸭子类型的示例
像JAVA,C这种静态语言,传入对象后需要检查对象的类型,类型不符合预期会报错.而Python中并不会对类型进行限制.在日常使用中其实已经或多或少的涉及到.例如各种魔法方法
1 | listTemp = [1,2,3] |
不管你传入的列表或者元组甚至是你自己定义的序列类别,都可以正确的输出其长度,只要你实现了__len__方法.
自定义鸭子类型示例
1 | class Student(object): |
传入对象,只关注对象的行为能不能实现,不关注对象的类型.其实讲到这里鸭子类型就已经很明了啦.