簡體   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