python import作为变量名

时间:2017-01-04 05:35:19

标签: python-3.x python-import

我想使用带有变量名的import。例如,我想做这样的事情

from var import my_class

我经历了蟒蛇documentation,但似乎有点令人困惑。我还看到了一些关于堆栈溢出的帖子,给出了类似这样的例子

import importlib
my_module = importlib.import_module("var, my_class)

这第二个例子在某种程度上起作用。我在这里看到的唯一问题var是导入但我没有在python的命名空间中看到my_class的属性。我如何将其与我原来的

示例相提并论
from var import my_class

2 个答案:

答案 0 :(得分:4)

以下是importlib的使用方法(不需要第二个参数):

var = importlib.import_module("var")

# Now, you can use the content of the module:
var.my_class()

from var import my_class没有直接可编程的等效项。

答案 1 :(得分:-2)

注意:正如@DYZ在评论中指出的那样,建议不要采用这种解决方法来支持importlib。将其留在这里是为了另一个有效的解决方案,但是Python docs建议“直接使用 import ()也不鼓励使用importlib.import_module()。”

您是否要导入名称由变量定义的模块?如果是这样,您可以使用__import__方法。例如:

>>> import os
>>> os.getcwd()
'/Users/christophershroba'
>>>
>>> name_to_import = "os"
>>> variable_module = __import__(name_to_import)
>>> variable_module.getcwd()
'/Users/christophershroba'

如果您还想调用该变量模块的变量方法,可以使用模块上的__getattribute__方法获取该函数,然后照常使用()调用它。下面标有“请注意”的行不是必需的,我只是包含它以显示__getattribute__方法正在返回一个函数。

>>> name_to_import = "os"
>>> method_to_call = "getcwd"
>>> variable_module = __import__(name_to_import)
>>> variable_module.__getattribute__(method_to_call) # See note
<built-in function getcwd>
>>> variable_module.__getattribute__(method_to_call)()
'/Users/christophershroba'

有关Python 3 herePython2 here的更多文档。