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