第6章 使用描述符更充分地利用对象

本章将介绍一个新概念——描述符。这是一个Python开发进阶概念,也是使用其他语言的程序员不熟悉的,因此无法进行简单的类比。

描述符是另一个独特的Python特性,让面向对象编程更上一层楼,还让用户能够构建更强大、可重用性更高的抽象。很多库和框架都充分利用了描述符。

本章将帮助你实现下述与描述符相关的目标。

明白描述符是什么、它们是如何工作的以及如何有效地实现它们。

从概念和实现细节的角度出发,分析两类描述符——数据描述符和非数据描述符。

通过描述符有效地重用代码。

分析一些有效利用描述符的示例以及如何在API库中利用描述符。

本节探讨描述符背后的主要理念,帮助你理解其机制和内部工作原理。清楚这些后,将更容易理解6.2节的主题——各种描述符是如何工作的。

当你对描述符背后的理念有了大致认识后,我们将通过一个示例阐述如何使用描述符让实现更整洁、更符合Python语言习惯。

描述符的工作原理并不复杂,但需要注意的地方有很多,因此实现细节至关重要。

要实现描述符,至少需要两个类——客户端类和描述符类,其中描述符类实现了描述符本身的逻辑,而客户端类将利用描述符实现的功能(客户端类通常是域模型类——我们为解决问题创建的常规抽象)。

因此,描述符只是一个对象,它是实现了描述符协议的类的实例。这意味着类的接口必须至少包含下述魔法方法中的一个(在Python 3.6+中,这些魔法方法构成了描述符协议):

__get__;

__set__;

__delete__;

__set_name__。

本章遵循如表6.1所示的描述符命名约定。

表6.1 本章遵循的描述符命名约定

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.