系统学习Python——装饰器:装饰器的定义

发布时间:2023年12月18日

分类目录:《系统学习Python》总目录


装饰是为函数和类指定管理或扩增代码的一种方式。装饰器本身采取可调用对象的形式(如函数),并处理其他可调用对象。Python装饰器以两种相关的形式呈现,二者都不要求使用Python3.X或新式类:

  • 函数装饰器:在函数定义的时候进行名称重绑定,提供一个逻辑层来管理函数和方法,以及管理随后对它们的调用。
  • 类装饰器:在类定义的时候进行名称重绑定,提供一个逻辑层来管理类,以及管理随后调用它们所创建的实例。

简而言之,装饰器提供了一种方法,在函数和类定义语句结束时插人自动运行的代码一一对于函数装饰器,在def语句结束时插人;对于类装饰器,在class语句结束时插人。这样的代码可以扮演不同的角色,请参见后文的介绍。

管理调用和实例

在通常的用法中,这种自动运行的代码可能用来扩展对函数和类的调用。它通过安装随后被调用的包装器(即代理)对象来实现这一点:

  • 调用代理:函数装饰器安装包装器对象,以在需要的时候拦截之后的函数调用并处理它们,通常将调用继续传递到原始函数以执行管理好的动作。
  • 接口代理:类装饰器安装包装器对象,以在需要的时候拦截之后的实例创建调用并处理它们,通常将调用继续传递到原始类以创建一个管理好的实例。

装饰器通过在defclass语句的末尾自动把函数名和类名重绑定到其他可调用对象上来实现这些效果。当之后调用的时候,这些可调用对象可以完成诸如跟踪和计时函数调用、管理类实例属性访问等任务。

管理函数和类

尽管《系统学习Python——装饰器》系列文章中的大多数示例都使用包装器来拦截之后对函数和类的调用,但这并非使用装饰器的唯一方法:

  • 函数管理器:函数装饰器也可以用来管理函数对象,而不仅仅是管理随后对它们的调用,例如把一个函数注册为一个API。然而,这里我们主要关注更为常见的用法,即调用包装器应用程序。
  • 类管理器:类装饰器也可以用来直接管理类对象,而不仅仅是管理实例创建的调用,例如用新的方法扩展类。因为这些用法和元类有很大的重合,我们将在下一章看到其余的使用案例。我们将会发现,这两种工具都是在类创建过程的最后运行,但是类装饰器经常会提供更轻量级的解决方案。

换句话说,函数装饰器可以用来管理函数调用和函数对象,类装饰器可以用来管理类实例和类自身。通过返回装饰的对象自身而不是包装器,装饰器变成针对函数和类的一种简单的创建后步骤。不管扮演什么样的角色,装饰器都提供了一种方便而明确的方法,帮助你编写在程序开发和现实产品系统阶段都有用的工具。

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.

文章来源:https://blog.csdn.net/hy592070616/article/details/135070010
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。