from ... import * with __import__ function

时间:2010-07-22 19:49:21

标签: python import

  

可能重复:
  How does one do the equivalent of “import * from module” with Python's import function?

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

2 个答案:

答案 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会做什么。