#python #configuration #constants
#python #конфигурация #константы
Вопрос:
У меня есть модуль, в котором определены константы __init__.py
. Я хотел бы прочитать в файле конфигурации и определить константы на основе этого содержимого конфигурации. Есть ли способ определить константы из строковых ключей, например:
__init__py
:
config = { "FOO": "BAR" }
for key, value in config.items():
define(key, value) # <- "define" is what I am looking for
foo.py
:
from . import FOO
print(FOO)
> BAR
Я также рассматривал объект класса Config, который имеет эти константы, но тогда мне всегда приходилось бы обращаться к ним через объект; не так аккуратно, как просто писать константу в моем коде.
Или есть какой-либо другой более питонический способ сделать это?
Ответ №1:
Для достижения этой цели вы должны создать переменную в своем модуле, но, поскольку вы знаете имя переменной только во время выполнения, вам придется использовать setattr
ее в своем модуле (к которому вы можете получить доступ из sys
модуля):
import sys
setattr(sys.modules[__name__], var_name, var_val)
Комментарии:
1. Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.
2. Оба ответа работают. В итоге я использовал этот, поскольку немного более очевидно, что делает код, например. установите атрибут в модуле , чтобы его можно было импортировать.
Ответ №2:
Вы могли бы добавить их в builtins:
import builtins
config = { "FOO": "BAR" }
for key, value in config.items():
# I prefer to have them prefixed, to make sure not overwriting existing values!
setattr(builtins, 'cfg_%s' % key, value)
# available everywhere (other modules as well)
print(cfg_FOO)
Out:
BAR
Комментарии:
1. Спасибо, что указали
builtins
, до сих пор даже не знал о них.