繁体   English   中英

递归装饰器重新初始化属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM