Я регистрирую некоторые из моих функций в глобальном наборе:
# registry.py
import functools
schedule_registry = set()
def register_scheduler(func):
@functools.wraps(func)
def func_wrapper():
print(f"adding {func.__name__}")
schedule_registry.add(func)
return func
return func_wrapper
@register_scheduler
def foo():
print("running foo")
Теперь я ожидаю, что schedule_registry
будет заполнено во время импорта (и будет напечатано "добавление ..."), но к моему удивлению:
In [1]: import registry
In [2]:
Ничего не печатается.
Дело в том, если я изменю декоратор на следующее:
def register_scheduler():
def func_wrapper(func):
print(f"adding {func.__name__}")
schedule_registry.add(func)
return func
return func_wrapper
@register_scheduler()
def foo():
print("running foo")
Я получаю то, что ожидаю:
In [1]: import registry
adding foo