Python 类的类变量似乎不会在包之间持久化。
我有一个类"HookRegistry",它应该动态记录用@regiser_hook方法注释的函数。它成功地做到了这一点,但是当我再次去查找注册的钩子列表时,保存它们的 list 变量似乎被重新初始化了。
class HookRegistry(object):
hooks = []
def register_hook(f):
HookRegistry.hooks.append(f)
print("Registrering hook. There are now {} hooks registered.".format(len(HookRegistry.hooks)))
def wrap(*args, **kwargs):
f(*args, **kwargs)
return wrap
def execute_hooks(*args, **kwargs):
for f in HookRegistry.hooks:
f(*args, **kwargs)
完整的源代码可以在 https://github.com/conallprendergast/python_hook_registry_example/tree/not_working
我在 arch linux 上运行 python 3.8
此问题已通过更改我的"hook"do_something* 文件中的代码来解决。进口的
from hookregistry import HookRegistry
需要更改为
from .hookregistry import HookRegistry
这是行不通的,因为模块do_something*
没有执行。我们可以很容易地检查这一点:只需将不正确的代码添加到do_something.py
这可以修复,将此代码添加到hooks/__init__.py
from .do_something import *
from .do_something_else import *