这是我在阅读《流畅的Python(第二版)》(Fluent Python, 2nd Edition) 过程中的代码实践、测试用例与学习笔记仓库。
- chapter17.py
- 探索了 Python 中的面向对象协议。
- 序列协议的实现(
__getitem__与__len__)。 - 核心探讨:鸭子类型(Duck Typing) vs 白鹅类型(Goose Typing) 的本质区别与
isinstance的底层逻辑。
- main.py
- 项目入口及通用示例。
- docs/
- 相关文档,包括深入探讨 duck_typing.md 的笔记。
“如果它走起来像鸭子,叫起来像鸭子,那它就是鸭子。”
- 行为至上:不关注对象的真实继承关系,只关注对象是否实现了我们需要的特定方法(如魔法方法)。
- 特点:极度灵活,隐式契约。不需要继承任何基类,依靠解释器运行时的行为来驱动。
显式声明的契约精神。
- 接口校验:通过继承
collections.abc模块中的抽象基类(ABC),或使用register进行虚拟子类注册,显式地声明对象实现了哪些接口。 - 特点:配合
isinstance(obj, abc.SomeABC)进行严谨的类型检查,避免诸如“字典”与“序列”仅因为具有同名方法(如__getitem__)而被混淆。
- Python 3.x
- 使用 uv 管理项目依赖。