[英]Recursive decorator reinitializing attributes
假设我们有一个递归 function 的装饰器:
def decorator(func):
def wrapper(*args, **kwargs):
...
res = func(*args, **kwargs)
...
return res
func.a = 0
wrapper.a = 0
return wrapper
每次在递归的第一步调用func
时,我都想重新初始化.a
属性(因此,当func
调用自身时, .a
属性不会被更改)。 我可以在装饰器中以某种方式实现它吗?
这对于装饰器是不可能的。 它们旨在完全接管func
的实现,以便所有调用 go 都通过包装器。
您需要的是第一个调用重新初始化.a
属性,这听起来像您想要某种转发:
def fwd_func(*args, **kwargs):
func.a = 0
...
res = func(*args, **kwargs)
...
return res
现在,只有顶级调用者应该调用fwd_func(...)
而不是func(...)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.