可能重复:
How does one do the equivalent of “import * from module” with Python's import function?
我如何使用__import__
函数执行from ... import *?
原因是我只在运行时知道文件的名称,并且在该文件中只有1个类。
答案 0 :(得分:5)
如果有人在阅读此内容时想要对标题中的问题进行实际答案,则可以通过操纵vars()
字典来完成。是的,在大多数情况下这样做是愚蠢的,但我可以想到实际上非常有用/酷的用例(例如,您可能想要一个静态模块名称,但希望模块的内容来自其他地方在运行时定义。与IMO类似,如果您熟悉它,则优于django.conf.settings
的行为。
module_name = "foo"
for key, val in vars(__import__(module_name)).iteritems():
if key.startswith('__') and key.endswith('__'):
continue
vars()[key] = val
将模块foo.py中的每个非系统变量导入当前命名空间。
谨慎使用:)
答案 1 :(得分:3)
别。 只是不。我需要解释它有多可怕吗?动态导入(虽然有时是不可避免的)并导入到全局命名空间(总是可以避免,但有时更简单的解决方案和精细的受信任模块)本身就足够糟糕了。动态导入全局命名空间是一场噩梦(并且可以避免)。
做_temp = __import__(name, globals(), locals(), [name_of_class]); your_class = _temp.name_of_class
。根据{{3}},这是关于名称导入name_of_class会做什么。