@装饰器名 来应用在函数或方法上。
入门例子
我们来创建一个装饰器吧- my_decorator 是装饰器,它接收一个函数 original_function 作为参数。
- wrapper 是内部函数,它是实际会被调用的新函数,它包裹了原始函数的调用,并在其前后增加了额外的行为。
- 当我们使用 @my_decorator 前缀在 xx_function 定义前,Python会自动将 xx_function 作为参数传递给 my_decorator,然后将返回的 wrapper 函数替换掉原来的 xx_function。
带参数的装饰器
如果原函数需要参数,可以在装饰器的 wrapper 函数中传递参数(如下例子输出结果和上边一样)装饰器分类
除了上边入门例子函数装饰器外,Python 还支持给类使用的装饰器。类装饰器用于动态修改类行为,它接收一个类作为参数,并返回一个新的类或修改后的类,类装饰器可以有一下功能:
- 添加/修改类的方法或属性
- 拦截实例化过程
- 实现单例模式、日志记录、权限检查等功能
装饰器定义
装饰器有两种常见定义形式:- 函数形式的类装饰器(接收类作为参数,返回新类)
- 类形式的类装饰器(实现 call 方法,使其可调用)
函数形式
应用到函数上的例子在上边提到了,这里是应用到类上类形式
应用到函数上多个装饰器的堆叠使用
你可以将多个装饰器堆叠在一起,它们会按照从下到上的顺序依次应用内置装饰器
Python 提供了一些内置的装饰器,例如:- @staticmethod: 将方法定义为静态方法,不需要实例化类即可调用。
- @classmethod: 将方法定义为类方法,第一个参数是类本身(通常命名为 cls)。
- @property: 将方法转换为属性,使其可以像属性一样访问。
命名空间
种 @xxx.xx 形式的装饰器实际上是属性访问的结果,可以分为几种情况 这种@xxx.xx 形式的装饰器实际上都是属性访问的结果

