加载中...

鸭子类型(duck typing)是动态类型语言中的一种类型风格,得名于"鸭子测试":如果它走起来像鸭子、叫起来像鸭子,那它就是鸭子。程序不检查对象声明的类型或继承关系,只要对象在运行时具备所需的方法或属性,就可以被使用。
在 Python、Ruby、JavaScript 等语言中,方法调用在运行时按名字动态查找。例如一个函数只要求参数有 read() 方法,那么文件对象、网络流、内存缓冲都能传入,无需共同基类或接口声明。这与静态语言"先声明接口、再实现"的名义类型(nominal typing)形成对照。
优点是解耦彻底、代码复用自然,测试中可用任意替身对象(mock);缺点是错误推迟到运行时暴露,大型代码库中难以静态推断依赖关系。
静态语言以结构类型(如 Go 的隐式接口、TypeScript 的结构化类型)在编译期实现类似效果;Python 的 Protocol 类型提示则给鸭子类型补上了静态检查能力。

登录 后参与讨论
暂无讨论,来发表第一条评论吧