第 12 章 继承的优缺点

(我们)推出继承的初衷是让新手顺利使用只有专家才能设计出来的框架。1

——Alan Kay
“The Early History of Smalltalk”

1Alan Kay,“The Early History of Smalltalk,”in SIGPLAN Not. 28, 3 (March 1993), 69-95. 网上也有这篇文章(http://propella.sakura.ne.jp/earlyHistoryST/EarlyHistoryST.html)。感谢我的朋友 Christiano Anderson 在我写这一章时告诉我这篇参考文献。

本章探讨继承和子类化,重点是说明对 Python 而言尤为重要的两个细节:

很多人觉得多重继承得不偿失。不支持多重继承的 Java 显然没有什么损失,C++ 对多重继承的滥用伤害了很多人,这可能还坚定了使用 Java 的决心。

然而,Java 的巨大成功和广泛影响,也导致很多刚接触 Python 的程序员没怎么见过真实的代码使用多重继承。鉴于此,我们将不再举简单的示例,而是通过两个重要的 Python 项目探讨多重继承,这两个项目是 GUI 工具包 Tkinter 和 Web 框架 Django。

我们将首先分析子类化内置类型的问题。本章余下的内容则探讨多重继承,我们将分析案例,并讨论构建类层次结构方面好的做法和不好的做法。