Python 3.8 переменная класса не является постоянной - PullRequest
0 голосов
/ 28 января 2020

Переменная класса для класса Python не сохраняется между пакетами.

У меня есть класс "HookRegistry", который должен динамически записывать функции, аннотированные с помощью метода @regiser_hook. Он делает это успешно, но когда я go снова выясняю список зарегистрированных хуков, переменная списка, содержащая их, кажется, переинициализируется.

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

Я бегу python 3,8 на арке linux

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Эта проблема исправлена ​​путем изменения моего кода в моих файлах "ловушки" do_something *. Импорт

from hookregistry import HookRegistry

необходимо изменить на

from .hookregistry import HookRegistry
0 голосов
/ 28 января 2020

Это не работает, потому что модуль do_something* не выполняется. (Мы легко можем проверить это: просто добавьте неправильный код в do_something.py

Это можно исправить, добавьте этот код в hooks/__init__.py

from .do_something import *
from .do_something_else import *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...