Добавление атрибутов в модуль Python во время выполнения для последующего импорта

Я добавляю атрибуты к модулю во время выполнения, используя следующие внутри цикла:

this_module = sys.modules[__name__]
setattr(this_module, attr_name, attr_value)

Когда я звоню print dir(this_module) из модуля, он показывает атрибуты. Большой!

Когда я импортирую модуль и пытаюсь использовать атрибут в декораторе, AttributeError исключение продолжает быть брошенным. Для отладки я позвонил dir() в импортированном модуле и ни один из атрибутов, добавленных на лету, не указан

Я даже добавил имена атрибутов в __all__ для import * и еще ничего!

Любые идеи будут великолепны. Также, пожалуйста, дайте мне знать любую терминологию, которую я мог бы пропустить. Я не смог найти ответ в поиске Google.

-

По предложению Кевина я добавил словарь в свое приложение Flask (вместо его предложения верхнего уровня, просто для удобства тестирования) и добавил в него следующие атрибуты:

app.security = dict()

В петле:

app.security[attr_name] = attr_value

В модуле, в котором используется декоратор ("time_entry" является именем атрибута и содержит экземпляр класса):

@app.security['time_entry'].need()

Когда я пытаюсь запустить сервер, я получаю эту ошибку:

    @security["time_write"].require()
             ^
    SyntaxError: invalid syntax

1 ответ

Решение

Я создал обходной путь для моей конкретной проблемы. Это не решение, и я все еще планирую продолжить его изучение после завершения этого проекта.

Я создал фиктивный класс и затем установил атрибут с его экземпляром в своем приложении Flask.

class Security: pass
app.security = Security()

Затем я устанавливаю атрибуты непосредственно в класс Security:

setattr(app.security, attr_name, attr_value)

Снова, это не решает, почему те атрибуты уровня модуля, которые я создавал во время выполнения, не были импортированы. Я вернусь и отредактирую это, как только у меня будет ответ на этот вопрос.

Другие вопросы по тегам