Я добавляю атрибуты модуля во время выполнения, используя следующие внутри цикла:Добавление атрибутов в модуль Python во время выполнения, чтобы быть импортированы позже
this_module = sys.modules[__name__]
setattr(this_module, attr_name, attr_value)
Когда я звоню print dir(this_module)
из модуля, он показывает атрибуты , Большой!
Когда я импортирую модуль и пытаюсь использовать атрибут в декораторе, возникает исключение AttributeError
. Для отладки я вызвал dir()
на импортированном модуле, и ни один из атрибутов, добавленных на лету, не указан!
Я даже добавил имена атрибутов к __all__
для import *
и все еще ничего!
Любые идеи были бы замечательными. Также, пожалуйста, дайте мне знать о любой терминологии, которую я мог бы пропустить. Я не смог найти ответ в Google.
-
Пер предложение Кевина, я добавил словарь фляги приложению (вместо его предложения топ-уровня, просто для удобства тестирования) и добавил эти атрибуты к ним:
app.security = dict()
В цикле:
app.security[attr_name] = attr_value
В модуле, где используется декоратор («time_entry» является имя атрибута, и он держит экземпляр класса):
@app.security['time_entry'].need()
Когда я пытаюсь запустить сервер, теперь я получаю эту ошибку:
@security["time_write"].require()
^
SyntaxError: invalid syntax
Почему вы делаете это вместо того, чтобы просто использовать словарь верхнего уровня? – Kevin
Вы уверены, что декоратор называется _after_, атрибут был установлен? Также вы можете попробовать выполнить глобальное attr_name', за которым следует 'attr_name = attr_value'. –
@Kevin: Нельзя использовать словарь в качестве декоратора, правда? Я должен быть в состоянии назвать это в декораторе. –