第5章 使用装饰器改善代码

本章探讨装饰器,它们在很多需要改善设计的情形下都很有用。我们将首先探讨装饰器是什么、装饰器是如何工作的以及如何实现装饰器。

具备这些知识后,我们将复习前几章学习的与软件设计最佳实践相关的概念,并看看在遵守这些原则方面,装饰器可提供什么样的帮助。

本章的学习目标如下。

理解Python装饰器的工作原理。

学习如何实现用于函数和类的装饰器。

有效地实现装饰器,避免常见的实现错误。

分析如何使用装饰器避免代码重复(DRY原则)。

研究如何使用装饰器帮助实现关注点分离。

分析优良的装饰器示例。

总结适合使用装饰器的常见场景、惯用法和模式。

很久以前,Python就通过PEP-318引入了装饰器,它最初是一种简化函数和方法修改工作的机制。

你首先必须明白的是,在Python中,函数与其他任何东西一样,也是常规对象。这意味着可将其赋给变量、作为函数参数甚至将其他函数应用于它们。经常需要编写小型函数,再对其进行变换,生成修改后的新版本(这类似于数学中的复合函数)。

最初引入装饰器的动机之一是,使用classmethod和staticmethod等函数来变换方法的原始定义时,必须使用一行额外的代码,在单独的语句中修改函数的原始定义。

一般而言,每次要对函数进行变换时,我们都必须使用modifier函数调用它,然后将它重新赋值给函数最初定义时使用的名称。

例如,假设有一个名为original的函数,还有一个名为modifier的函数,可用于改变其他函数的行为。要使用函数modifier对函数original进行变换,必须编写类似于下面的代码:

def original(...): ... original = ...

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.