导入具有公共名称空间前缀的许多模块的简明方法

时间:2013-12-12 11:53:37

标签: python syntax namespaces python-import idioms

我经常发现自己从模块中导入类,这些模块只在命名空间的最后部分有所不同,例如:

from a.b.c.d import Class1
from a.b.c.e import Class2
from a.b.c.f import Class3

我可以通过某种方式只输入一次a.b.c.部分吗?

我知道如果它们都具有完全相同的名称空间,即

from a.b.c import Class1
from a.b.c import Class2
from a.b.c import Class3

然后我可以输入

from a.b.c import (Class1, Class2, Class3)

所以对于我的第一个例子,我尝试过像

这样的事情
from a.b.c import (d.Class1 as Class1, 
                   e.Class2 as Class2, 
                   f.Class3 as Class3)

......但那没有用。

任何提示都将不胜感激。

2 个答案:

答案 0 :(得分:3)

不,没有语法可以将嵌套项导入为本地名称。

您可以导入不同的模块,然后分配到本地名称:

from a.b.c import d, e, f
Class1, Class2, Class3 = d.Class1, e.Class2, f.Class3
del d, e, f

但这不再具有可读性或简洁性。

答案 1 :(得分:3)

如果a是您自己的一个软件包(或者您愿意并且能够维护一个分支......),您可以使用a.b.c软件包作为外观:

# a/b/c/__init__.py
from d import Class1
from e import Class2
from f import Class3

然后:

# client code:
from a.b.c import Class1, Class2, Class3

会奏效。