鸭子类型(Duck Typing) 是 Python 中动态类型系统最核心、最具代表性的概念之一。
它也是让很多人从其他静态语言(Java、C#、C++、Go 等)转到 Python 时最容易'懵'的点,同时也是 Python 写起来特别爽、特别灵活的根本原因。
一、最经典的一句话解释
如果它走路像鸭子、叫声像鸭子,那么它就是鸭子。
翻译到编程语言:
如果一个对象有我需要的方法/属性,我就直接用它,我不在乎它到底是什么类型。
二、代码对比:鸭子类型 vs 显式类型检查
1. 静态语言风格(Java 写法)
interface Flyable {
void fly();
}
class Duck implements Flyable {
public void fly() {
System.out.println("鸭子扑腾翅膀飞");
}
}
class Airplane implements Flyable {
public void fly() {
System.out.println("飞机喷气起飞");
}
}
class Mallard extends Duck {
/* ... */
}
void makeItFly(Flyable bird) {
bird.fly();
}
必须显式声明接口/父类关系。
2. Python 的鸭子类型写法(最自然的样子)
def make_it_fly(thing):
thing.fly() # 我不管你是谁,只要你有 fly() 就行
class Duck:
():
()
:
():
()
:
():
()
:
():
()

