Как добавить атрибуты модуля во время выполнения?

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

Как добавить атрибуты модуля во время выполнения?

Ответы

Ответ 1

Спасибо @Dharmesh. Это было то, что мне нужно. Необходимо только одно изменение. Модуль не будет импортировать себя, чтобы получить объект модуля, который я могу сделать:

setattr(sys.modules[__name__], 'attr1', 'attr1')

Ответ 2

Если вы не знаете имя атрибута до выполнения, используйте setattr:

>>> import mymodule
>>> setattr(mymodule, 'point', (1.0, 4.0))
>>> mymodule.point
(1.0, 4.0)

Ответ 3

Просто установите его.

my_object = MyObject()
my_object.my_custom_attribute = 'my_value'

Ответ 4

Создайте динамический класс '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')

Ответ 5

Глобальная область действия модуля - это сам модуль, поэтому просто установите глобальный.

# module.py
a = 1

# script.py
import module
print module.a
# 1