第3章 语法最佳实践——类级别以上
本章我们将重点介绍类的语法最佳实践。这里并不打算涉及设计模式,因为这部分内容将在第14章介绍。本章概述了用于操作和改进类代码的Python高级语法。
在Python 2的历史中,对象模型已经发生了很大变化。在很长一段时间里,同一种语言的面向对象编程范式存在两种实现方式。这两种模型被简称为旧式(old-style)类和新式(new-style)类。Python 3终结了这一分歧,其开发者只能使用被称为新式类的模型。不管怎样,知道两种模型在Python 2中的工作原理仍是很重要的,因为这有助于你移植旧代码和编写向后兼容的应用。了解对象模型如何变化,也有助于你理解它现在为何如此设计。这也是为什么本章包含关于 Python 2 旧特性的大量内容,尽管本书针对的是最新版的Python 3。
本章将讨论下列主题。
- 子类化内置类型。
- 访问超类中的方法。
- 使用
property
和槽(slot)。 - 元编程。
3.1 子类化内置类型
Python的子类化内置类型非常简单。有一个叫作object
的内置类型,它是所有内置类型的共同祖先,也是所有没有显式指定父类的用户自定义类的共同祖先。正由于此,每当需要实现与某个内置类型具有相似行为的类时,最好的方法就是将这个内置类型子类化。
现在,我们将向你展示一个名为distinctdict
类的代码如下,它就使用了这种方法。它是Python中普通的dict
类型的子类。这个新类的大部分行为都与普通的dict
相同,但它不允许多个键对应相同的值。如果有人试图添加具有相同值的新元素,那么会引发一个ValueError
的子类,并给出一些帮助信息:
class DistinctError(ValueError): """如果向distinctdict添加重复值,则引发这个错误。""" ...
Get Python高级编程(第2版) now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.