2011-06-06 50 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

相關問題