分类目录:《系统学习Python》总目录
函数装饰器和类装饰器似乎都能接受参数,但是实际上这些参数传递给了返回装饰器的一个可调用对象,而装饰器反过来又返回一个可调用对象。本质上讲,这通常建立了状态保留的多个层级。例如,如下代码:
@decorator(A, B)
def F(arg):
pass
F(0)
自动地映射到接下来这样对等的形式,其中装饰器是一个可调用对象,它返回实际的装饰器。返回的装饰器反过来返回可调用的对象,这个对象随后运行以调用最初的函数名:
def decorator(A, B)
# 保存或者使用A, B
def actual_decorator(F):
# 保存或者使用F
return callable
return actual_decorator
这个结构中的外层函数通常会把装饰器参数与状态信息分开保存,以便在实际的装饰器中使用,或者在它所返回的可调用对象中使用,或者在二者中都使用。这段代码在外围函数作用域引用中保存了状态信息参数,但是通常也可以使用类属性来保存。
换句话说,装饰器参数往往意味着可调用对象的三个层级:接受装饰器参数的一个可调用对象,它返回一个可调用对象以作为装饰器,该装饰器返回一个可调用对象来处理对最初的函数或类的调用。这三个层级的每一个都可能是一个数或类,并且可能以作用域或类属性的形式保存了状态。
装饰器参数能够用来提供属性初始化的值,调用追踪信息标签,提供需要验证的属性名称等一一一用于对象或其代理的任何种类的配置参数都是一个备选项。
参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.