Добавление атрибутов в модуль 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)
Снова, это не решает, почему те атрибуты уровня модуля, которые я создавал во время выполнения, не были импортированы. Я вернусь и отредактирую это, как только у меня будет ответ на этот вопрос.