Classes 类¶ Python 在尽可能不增加新的语法和语义的情况下加入了类机制
这种机制是 C++ 和 Modula-3 的混合
Python 中的类没有在用户和定义之间建立一个绝对的屏障,而是依赖于用户自觉的不去“破坏定义”
然而, 类机制最重要的功能都完整的保留下来:类继承机制允许多继承,派生类可以覆盖(override)基类中的任 何方法,方法中可以调用基类中的同名方法
对象可以包含任意数量的私有成员
用 C++ 术语来讲,所有的类成员(包括数据成员)都是*公有*(参见 Priv ate Variables 私有变量 )的,所有 的成员函数都是*虚*( virtual )的
没有特定的构造和析构函数
像 Modula-3 一样,在成员方法中没 有什么简便的方式可以引用对象的成员:方法函数在定义时需要以引用的对象做为第一个参数,调用时则会隐式 引用对象
像 Smalltalk 一样,类本身就是对象,在更为广义的范围上理解: Python 中一切数据类型都 是对象
这样就形成了语义上的引入和重命名
但是,像 C++ 而非 Modula-3 中那样,大多数带有特殊语 法的内置操作符(算法运算符、下标等)都可以针对类的需要重新定义
A Word About Terminology 术语漫谈¶ 由于没有什么关于类的通用术语,我从 Smalltalk 和 C++ 中借用一些(我更希望用 Modula-3 的,因 为它的面向对象机制比 C++更接近 Python,不过我想没多少读者听说过它)
对象是被特化的,多个名字(在多个作用域中)可以绑定同一个对象
这相当于其它语言中的别名
通常对 Python 的第一印象中会忽略这一点,使用那些不可变的基本类型(数值、字符串、元组)时也可以很放心 的忽视它
然而,在 Python 代码调用字典、链表之类可变对象,以及大多数涉及