Ответ 1
import mymodule
var = getattr(mymodule, variablename)
Я пытаюсь найти способ доступа к переменной модуля по имени, но пока ничего не нашел. Теперь я использую следующее:
var = eval('myModule.%s' % (variableName))
но он нечеткий и прерывает проверку ошибок IDE (т.е. в eclipse/pydev import myModule помечен как неиспользуемый, в то время как для строки выше). Есть ли лучший способ сделать это? Возможно, встроенная функция модуля я не знаю?
import mymodule
var = getattr(mymodule, variablename)
getattr(themodule, "attribute_name", None)
Третий аргумент является значением по умолчанию, если атрибут не существует.
С https://docs.python.org/2/library/functions.html#getattr
Вернуть значение именованного атрибута объекта. имя должно быть строкой. Если строка является именем одного из атрибутов объектов, результатом является значение этого атрибута. Например, getattr (x, 'foobar') эквивалентен x.foobar. Если названный атрибут не существует, возвращается значение по умолчанию, если оно предусмотрено, в противном случае вызывается AttributeError.
Другой вариант - использовать INSPECT и функцию getmembers (modulename).
Он вернет полный список того, что находится в модуле, который затем может быть кэширован. например.
>>>cache = dict(inspect.getmembers(module))
>>>cache["__name__"]
Pyfile1 test
>>>cache["__email__"]
'[email protected]'
>>>cache["test"]("abcdef")
test, abcdef
Преимущество здесь в том, что вы выполняете поиск только один раз, и предполагается, что модуль не изменяется во время выполнения программы.