2011-06-06 46 views
8

在相对进口中不允许*的原因是什么?例如python:在相对导入中不允许*的原因是什么?

from ..new_tool import * 

,或者直接做一个相对导入:

import ..new_tool 
+0

from ..new_tool import *不健康..它将导入..new_tool下的所有东西。如果您声明的名称与导入的名称匹配,它可能与您的method_name或attribute_name产生冲突。有些时候循环依赖可能会发生。 – Tauquir 2011-06-06 21:16:15

+0

@Tauquir:适用于任何'import *',而不仅仅是相对的。 – Claudiu 2011-06-07 13:17:20

+0

仍然在等待'import *'部分的回答,这个部分不适用于普通的回调 – Claudiu 2011-06-07 20:25:42

回答

7

原因后者被禁止是..new_tool不处于表达(PEP 328)可用:

原因import .foo禁止 是因为经过

import XXX.YYY.ZZZ 

然后XXX.YYY.ZZZ可用于 表达式。但是

.moduleY 

不能在 表达式中使用。

由于* -imports应该永远只能是一个快速的黑客,而在发展,我怀疑相对* -imports的功能被忽略了,因为它是没有必要的。

+0

嗯,我想他们可以做'import .foo as _foo'。尽管你的代码中没有'import *'是很好的。 – Claudiu 2011-06-07 13:22:28

+0

尽管允许'import ... as',但不是一个空的'import',这很奇怪。 – katrielalex 2011-06-07 13:43:51

+0

是真的。实际上,我想你总是可以做到。导入foo',所以你不会因为无法执行'import .foo'而失去任何东西。 – Claudiu 2011-06-07 13:57:56

相关问题