Подтвердить что ты не робот

Python получает переменную модуля по имени

Я пытаюсь найти способ доступа к переменной модуля по имени, но пока ничего не нашел. Теперь я использую следующее:

var = eval('myModule.%s' % (variableName))

но он нечеткий и прерывает проверку ошибок IDE (т.е. в eclipse/pydev import myModule помечен как неиспользуемый, в то время как для строки выше). Есть ли лучший способ сделать это? Возможно, встроенная функция модуля я не знаю?

4b9b3361

Ответ 1

import mymodule

var = getattr(mymodule, variablename)

Ответ 2

getattr(themodule, "attribute_name", None)

Третий аргумент является значением по умолчанию, если атрибут не существует.

С https://docs.python.org/2/library/functions.html#getattr

Вернуть значение именованного атрибута объекта. имя должно быть строкой. Если строка является именем одного из атрибутов объектов, результатом является значение этого атрибута. Например, getattr (x, 'foobar') эквивалентен x.foobar. Если названный атрибут не существует, возвращается значение по умолчанию, если оно предусмотрено, в противном случае вызывается AttributeError.

Ответ 3

Другой вариант - использовать INSPECT и функцию getmembers (modulename).

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

>>>cache = dict(inspect.getmembers(module))
>>>cache["__name__"]   
Pyfile1 test

>>>cache["__email__"]
'[email protected]'

>>>cache["test"]("abcdef")
test,  abcdef

Преимущество здесь в том, что вы выполняете поиск только один раз, и предполагается, что модуль не изменяется во время выполнения программы.