在Python中,可以显式导入虚线子模块:
import os.path
使os.path
可用。
现在,是否有一种简单的方法可以为子子模块执行相同的操作?以下代码(不起作用)说明了我要找的内容:
from A import B.C
from A import B.D
对于我需要使用的模块from A import B
,<{> {B.C
} {}} {}我想这样做是因为:
B.D
和A.B
(C
)污染主命名空间,因为它们没有非常具体的名称。D
命名空间内(出于同样的原因)。一种解决方案是:
from A.B import C, D
加载并定义B
和from A import B
from A.B import C, D
del C, D
。然而,这是(1)非常不寻常,(2)有些模糊(定义{{1}}和B.C
的副作用)和(3)可能结果不保证(将B.D
并始终使用此代码定义B.C
。)。
这种只在命名空间中放置B.D
和B.C
(以及B.D
)的方法是否可以接受?有更好的方法吗?也许最好找到一些清晰的妥协,比如B.C
?
虽然我遇到了Python 2.6(没有importlib模块...),但对于这个问题,我对任何现代解决方案都很好奇。
答案 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