from ... import*with __import__ function

Pwn*_*nna 4 python import

可能重复:
如何使用Python的导入功能执行"import*from module"的等效操作?

如何使用__import__函数执行from ... import*?原因是我只在运行时知道文件的名称,并且在该文件中只有1个类.

dan*_*nny 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
Run Code Online (Sandbox Code Playgroud)

这会将模块foo.py中的每个非系统变量导入当前命名空间.

谨慎使用:)


小智 3

不。只是不要。我需要解释一下这有多可怕吗?动态导入(虽然有时不可避免)和导入全局命名空间(总是可以避免的,但有时更简单的解决方案和受信任的模块也很好)本身就够糟糕的了。动态导入到全局命名空间是......一场噩梦(并且可以避免)。

做就是了_temp = __import__(name, globals(), locals(), [name_of_class]); your_class = _temp.name_of_class。根据文档,这是关于 from name import name_of_class 会做什么。