我想使用带有变量名的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
答案 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 here或Python2 here的更多文档。