这章讨论“接口”问题。折腾面向对象那些年,接口被大书特书过。特别是Java。但是Python选择的是完全不同的路线。它选择简洁和实用,并不追求纯粹。

Python更推崇所谓“鸭子类型”的做法:只要你叫的像鸭子,走路像鸭子,那你就是鸭子 – 直接调用吧。Python里面连interface关键字都没有。我觉得它的思路更倾向于“协议约定”。只要你实现了约定的接口,支持协议就行了,至于是不是继承来的,是不是面向对象,根本不重要,无人关心。因为只有运行时才会检查,如果检查失败,还可以使用所谓“猴子补丁”,在运行时实现需要的协议。一切都很“动态”,规则宽松。

动态语言,本身就适合“涂涂抹抹”式的编程,如果定义的过于严格,就会感觉束缚太多,不方便、不好用。

章节后面,探讨了如何定义使用抽象基类的问题。但是作者提示:不要自己定义抽象基类。日常使用中,应该创建现有抽象基类的子类,或者使用现有的抽象基类注册。

 

流畅的Python-Fluent Python读书笔记-12-继承的优缺点
流畅的Python-Fluent Python读书笔记-10-序列的修改、散列和切片