"来自A进口B.C"在Python?

时间:2014-04-30 09:55:12

标签: python attributes python-import

在Python中,可以显式导入虚线子模块:

import os.path

使os.path可用。

现在,是否有一种简单的方法可以为子子模块执行相同的操作?以下代码(不起作用)说明了我要找的内容:

from A import B.C
from A import B.D
对于我需要使用的模块from A import B,<{> {B.C

} {}} {}我想这样做是因为:

  • 我不希望使用B.DA.BC)污染主命名空间,因为它们没有非常具体的名称。
  • 我想将子子模块保留在D命名空间内(出于同样的原因)。

一种解决方案是:

from A.B import C, D

加载并定义Bfrom A import B from A.B import C, D del C, D 。然而,这是(1)非常不寻常,(2)有些模糊(定义{{​​1}}和B.C的副作用)和(3)可能结果不保证(将B.D并始终使用此代码定义B.C。)。

这种只在命名空间中放置B.DB.C(以及B.D)的方法是否可以接受?有更好的方法吗?也许最好找到一些清晰的妥协,比如B.C

虽然我遇到了Python 2.6(没有importlib模块...),但对于这个问题,我对任何现代解决方案都很好奇。

3 个答案:

答案 0 :(得分:2)

对于from A import B.C的意图,我建议这样做:

from A.B import C as B_C

答案 1 :(得分:1)

importlib可以提供帮助

import importlib
from A import B
importlib.import_module('A.B.C')
importlib.import_module('A.B.D')
# Now you can use B.C & B.D

在Python2.6上你应该能够

from A import B
import A.B.C
import A.B.D
del A

答案 2 :(得分:1)

其中一个最干净的方法就是做Jayanth所说的。如果A是一个长名称,那么您可以使用&#39; as&#39;重命名。关键字

import A as X