python按名称获取模块变量

时间:2014-02-25 10:17:45

标签: python variables module

我正在尝试找到一种按名称访问模块变量的方法,但还没有找到任何东西。我现在使用的是:

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

但是它很模糊并且破坏了IDE错误检查(即在eclipse / pydev import中myModule标记为未使用,而上面的行需要它)。有没有更好的方法呢?可能是我不知道的模块内置函数?

4 个答案:

答案 0 :(得分:26)

import mymodule

var = getattr(mymodule, variablename)

答案 1 :(得分:5)

getattr(themodule, "attribute_name", None)

如果属性不存在,则第三个参数是默认值。

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

  

返回object的named属性的值。 name必须是一个字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,getattr(x,' foobar')等同于x.foobar。如果named属性不存在,则返回default(如果提供),否则引发AttributeError。

答案 2 :(得分:0)

另一种选择是使用INSPECT和getmembers(modulename)函数。

它将返回模块中内容的完整列表,然后可以对其进行缓存。例如。

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

>>>cache["__email__"]
'name@email.com'

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

此处的优点是您只执行一次查找,并且假定模块在程序执行期间未更改。

答案 3 :(得分:0)

如果要从当前运行的模块中获取一个变量(而不是另一个):

import sys

# sys.modules[__name__] is the instance of the current module
var = getattr(sys.modules[__name__], 'var_name')

var当然可以是一个regualr变量,类,或者基本上是其他任何东西:)