Python 3.8 类变量不持久



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 *

最新更新