13.17 相关模块和文档

我们在本章已经对核心语言做了讲述,而Python语言中有几个扩展了核心语言功能的经典类。这些类为Python数据类型的子类化提供了方便。

User*模块好比速食品,方便即食。我们曾提到类可以有特殊的方法,如果实现了这些特殊方法,就可以对类进行定制,这样当对一个标准类型封装时,可以给实例带来和类型一样的使用效果。

UserList和UserDict,还有新的UserString(从Python1.6版本开始引入)分别代表对列表、字典、字符串对象进行封装的类定义模块。这些模块的主要用处是提供给用户所需要的功能,这样你就不必自己动手去实现它们了,同时还可以作为基类,提供子类化和进一步定制的功能。Python语言已经为我们提供了大量有用的内建类型,但这种“由你自己定制”类型的附加功能使得Python语言更加强大。

在第4章里,我们介绍了Python语言的标准类型和其他内建类型。types模块是进一步学习Python类型方面知识的好地方,其中的一些内容已超出了本书的讨论范围。types模块还定义了一些可以用于进行比较操作的类型对象(这种比较操作在Python中很常见,因为它不支持方法的重载——这简化的语言本身,同时又提供了一些工具,为看似欠缺的地方添加功能)。

下面的代码检查传递到foo函数的数据对象是否是一个整型或一个字符串,不允许其他类型出现(否则会引发一个异常):

13.17 相关模块和文档 - 图1

最后一个相关模块是operator模块。这个模块提供了Python中大多数标准操作符的函数版本。在某些情况下,这种接口类型比标准操作符的硬编码方式更通用。

请看下边的示例。在你阅读代码时,请设想一下如果此实现中使用的是一个个操作符的话,那会多写多少行代码啊?

13.17 相关模块和文档 - 图2

13.17 相关模块和文档 - 图3

上面这段代码定义了三个向量,前两个包含着操作数,最后一个代表程序员打算对两个操作数进行的一系列操作。最外层循环遍历每个操作运算,而最内层的两个循环用每个操作数向量中的元素组成各种可能的有序数据对。最后,print语句打印出将当前操作符应用在给定参数上所得的运算结果。

我们前面介绍过的模块都列在表13.5中。

13.17 相关模块和文档 - 图4

在《Python FAQ》中,有许多与类和面向对象编程有关的问题。它对Python类库以及《Python语言参考手册》都是很好的补充材料。关于新风格的类,请参考PEP 252、PEP 253和Python2.2以后的相关文档。