Ответ 1
Спасибо @Dharmesh. Это было то, что мне нужно. Необходимо только одно изменение. Модуль не будет импортировать себя, чтобы получить объект модуля, который я могу сделать:
setattr(sys.modules[__name__], 'attr1', 'attr1')
Мне нужно добавить атрибуты модуля во время выполнения. Например, когда модуль загружен, он считывает файл, в котором содержатся данные. Я хотел бы, чтобы эти данные были доступны как атрибут модуля, но данные доступны только во время выполнения.
Как добавить атрибуты модуля во время выполнения?
Спасибо @Dharmesh. Это было то, что мне нужно. Необходимо только одно изменение. Модуль не будет импортировать себя, чтобы получить объект модуля, который я могу сделать:
setattr(sys.modules[__name__], 'attr1', 'attr1')
Если вы не знаете имя атрибута до выполнения, используйте setattr
:
>>> import mymodule
>>> setattr(mymodule, 'point', (1.0, 4.0))
>>> mymodule.point
(1.0, 4.0)
Просто установите его.
my_object = MyObject()
my_object.my_custom_attribute = 'my_value'
Создайте динамический класс 'Module' и добавьте атрибуты динамически, используя словарь, например:
attributes = {'attr1': 'attr1', 'attr2': 'attr2'}
module = type('Module', (), attributes)
ИЛИ Создать только динамический класс 'Module'
module = type('Module', (), {})
и добавьте атрибут с помощью метода setattr следующим образом:
setattr(module, 'attr3', 'attr3')
ИЛИ
import module
setattr(module, 'attr1', 'attr1')
Глобальная область действия модуля - это сам модуль, поэтому просто установите глобальный.
# module.py
a = 1
# script.py
import module
print module.a
# 1