使用importlib导入的模块的别名

时间:2020-07-29 15:02:55

标签: python import

一旦导入了foo类的bar模块,

import importlib
foo = importlib.import_module('path/to/foo')

您如何直接调用bar.run()而不是foo.bar.run()

我想你可以做到这一点bar = foo.bar 但是我想对foo中的所有对象执行此操作,但不能对每个对象都执行此操作,这将花费太多时间。

1 个答案:

答案 0 :(得分:1)

您可能需要枚举foo模块中导出的对象,并将它们分配给全局变量。在导入模块的常规机制中,*将与__all__变量中列出的名称匹配,或者将获取所有不以下划线(_)开头的名称。

names = getattr(foo, '__all__', [])
if not names:
  names = [n for n in foo.__dict__.keys() if n[:1] != '_']

for name in names:
  globals()[name] = getattr(foo, name)