9. 类

类提供了一种组合数据和功能的方法。 创建一个新类意味着创建一个新的对象 类型,从而允许创建一个该类型的新 实例 。 每个类的实例可以拥有保存自己状态的属性。 一个类的实例也可以有改变自己状态的(定义在类中的)方法。

和其他编程语言相比,Python 用非常少的新语法和语义将类加入到语言中。它是 C++ 和 Modula-3 中类机制的结合。Python 的类提供了面向对象编程的所有标准特性:类继承机制允许多个基类,派生类可以覆盖它基类的任何方法,一个方法可以调用基类中相同名称的的方法。对象可以包含任意数量和类型的数据。和模块一样,类也拥有 Python 天然的动态特性:它们在运行时创建,可以在创建后修改。

在 C++ 术语中,通常类成员(包括数据成员)是 public (例外见下文 私有变量),所有成员函数都是 virtual。 与在 Modula-3 中一样,没有用于从其方法引用对象成员的简写:方法函数使用表示对象的显式第一个参数声明,该参数由调用隐式提供。 与 Smalltalk 一样,类本身也是对象。 这为导入和重命名提供了语义。 与 C++ 和 Modula-3 不同,内置类型可以用作用户扩展的基类。 此外,与 C++ 一样,大多数具有特殊语法(算术运算符,下标等)的内置运算符都可以为类实例而重新定义。

(由于缺乏关于类的公认术语,我会偶尔使用 Smalltalk 和 C++ 的用辞。 我还会使用 Modula-3 的术语,因为其面向对象的语义比 C++ 更接近 Python,但我预计少有读者听说过它。)