Python中的“来自导入B.C”?

Python中的“来自导入B.C”?,python,attributes,python-import,Python,Attributes,Python Import,在Python中,可以显式导入虚线子模块: import os.path 使os.path可用 现在,有没有一种简单的方法可以对子模块执行相同的操作?以下不起作用的代码说明了我要查找的内容: from A import B.C from A import B.D 对于我需要使用的模块A.B,从A导入B不导入B.C和B.D。我之所以这样做是因为: 我不喜欢用A.B导入C,D中的C和D污染主名称空间,因为它们没有非常具体的名称。 出于同样的原因,我希望将子模块保留在它们的B名称空间中。 一个解决

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

import os.path
使os.path可用

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

from A import B.C
from A import B.D
对于我需要使用的模块A.B,从A导入B不导入B.C和B.D。我之所以这样做是因为:

我不喜欢用A.B导入C,D中的C和D污染主名称空间,因为它们没有非常具体的名称。 出于同样的原因,我希望将子模块保留在它们的B名称空间中。 一个解决方案是:

from A import B
from A.B import C, D
del C, D
它加载并定义了B.C和B.D。然而,这是1非常不寻常的,2定义B.C和B.D的副作用有些模糊,3可能会导致无法保证的结果。B.C和B.D是否总是用此代码定义

这种只将B.C、B.D和B放在名称空间中的方法可以接受吗?有更好的方法吗?也许最好能找到一些清晰的折衷方案,比如从A.B导入C作为B_C,D作为B_D

虽然我一直在使用Python2.6 no importlib module…,但对于这个问题,我也对任何现代解决方案感到好奇。

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
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

最干净的方法之一就是做Jayanth提到的事情。如果A是一个长名称,则可以使用“as”关键字重命名

import A as X

最干净的方法之一就是做Jayanth提到的事情。如果A是一个长名称,则可以使用“as”关键字重命名

import A as X
出于从不列颠哥伦比亚省进口的目的,我建议这样做:

from A.B import C as B_C
出于从不列颠哥伦比亚省进口的目的,我建议这样做:

from A.B import C as B_C

为什么不导入A并使用A.B.C和A.B.D?是的,但A实际上是一个很长的名称,而且调用的次数很多,因此我想在易读性和方便性之间找到一个折衷点,特别是因为B在我的例子中是非常具体的。使用B.C和B.D将是一个很好的折衷办法。@JayanthKoushik:此外,a.B不是通过导入a导入的,所以这不起作用。为什么不导入a并使用a.B.C和a.B.D?是的,但a实际上是一个很长的名称,调用也很多,所以我想在易读性和方便性之间找到一个折衷办法,特别是因为B这个名字在我的例子中非常具体。使用B.C和B.D将是一个很好的折衷办法。@JayanthKoushik:此外,a.B不是通过导入a导入的,因此这不起作用。这肯定不是问题的答案……这个答案只是作为对Jayanth评论的改进而提供的。对这样的建议投反对票肯定不是民事行为。我没有发表评论的唯一原因仅仅是因为我没有足够的代表将其作为评论发表。事实上,@vonPetrushev的答案与我的答案非常相似。对不起,我现在意识到我错过了Jayanth提到的“做什么”部分。我删除了我的否决票我仍然理解否决一个不是答案的答案是合适的,因为如果答案没有通过测试,甚至可以标记答案,但这不适用于这里。如果你充实了你的答案,使它更加明确和独立,我会考虑对它进行投票,因为这个想法是好的。谢谢你,这使我们确信这不是问题的答案…这个答案只是作为对Jaynth'评论的改进而提供的。对这样的建议投反对票肯定不是民事行为。我没有发表评论的唯一原因仅仅是因为我没有足够的代表将其作为评论发表。事实上,@vonPetrushev的答案与我的答案非常相似。对不起,我现在意识到我错过了Jayanth提到的“做什么”部分。我删除了我的否决票我仍然理解否决一个不是答案的答案是合适的,因为如果答案没有通过测试,甚至可以标记答案,但这不适用于这里。如果你充实你的答案,使它更加明确和独立,我会考虑对它进行投票,因为这个想法是好的。谢谢,这使我觉得它在我的例子中不起作用,Python 2.6,它比我的B更干净。从A.B进口C;我不确定del C是否保证有效,即始终提供B.C。谢谢。你知道Python是否从A导入B;从A.B进口C、D;del C,D保证B.C和B.D被创建并保留?如果您有任何推荐信,将不胜感激!同样地,一个显示import a.B.C使B.C可用的参考资料将非常棒!虽然它在我的Python 2.6中不起作用,但它比我的导入B更干净;从A.B进口C;我不确定del C是否保证有效,即始终提供B.C。谢谢。你知道Python是否从A导入B;从A.B进口C、D;del C,D保证B.C和B.D被创建并保留?如果您有推荐信,将不胜感激 任何同样地,一个显示import a.B.C使B.C可用的参考资料将非常棒!