第6章 使用描述符更充分地利用对象
本章将介绍一个新概念——描述符。这是一个Python开发进阶概念,也是使用其他语言的程序员不熟悉的,因此无法进行简单的类比。
描述符是另一个独特的Python特性,让面向对象编程更上一层楼,还让用户能够构建更强大、可重用性更高的抽象。很多库和框架都充分利用了描述符。
本章将帮助你实现下述与描述符相关的目标。
● 明白描述符是什么、它们是如何工作的以及如何有效地实现它们。
● 从概念和实现细节的角度出发,分析两类描述符——数据描述符和非数据描述符。
● 通过描述符有效地重用代码。
● 分析一些有效利用描述符的示例以及如何在API库中利用描述符。
6.1 初识描述符
本节探讨描述符背后的主要理念,帮助你理解其机制和内部工作原理。清楚这些后,将更容易理解6.2节的主题——各种描述符是如何工作的。
当你对描述符背后的理念有了大致认识后,我们将通过一个示例阐述如何使用描述符让实现更整洁、更符合Python语言习惯。
6.1.1 描述符背后的机制
描述符的工作原理并不复杂,但需要注意的地方有很多,因此实现细节至关重要。
要实现描述符,至少需要两个类——客户端类和描述符类,其中描述符类实现了描述符本身的逻辑,而客户端类将利用描述符实现的功能(客户端类通常是域模型类——我们为解决问题创建的常规抽象)。
因此,描述符只是一个对象,它是实现了描述符协议的类的实例。这意味着类的接口必须至少包含下述魔法方法中的一个(在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.