2017-07-18 92 views
0

我想要做的蟒蛇,其中XYZ,_a和_D是封裝和Foo(以下)的內部_D定義:蟒蛇嵌套導入別名

XYZ._a._d.foo() 

不過,我想別名_a到和_D到d,這樣我可以把它想:

a.d.foo() 

我試着做以下,但似乎走樣不會生效我預期的方式,它說:「無模塊命名爲」。有沒有辦法做到這一點?

from XYZ import _a as a 
from a import _d as d 

a.d.foo() 

回答

0

由於進口別名在當前模塊中定義的,而不是_D模塊裏面,那麼你就不能直觀地做到這一點。別名的目的是讓當前模塊容易訪問較深的模塊。

from XYZ import _a as a 
from XYZ._a import _d as d # sets d in the current module only 

d.foo() #works 
a._d.foo() #works 
a.d.foo() #fails 

,如果你想改變_a命名空間,你必須將其設置有直接

from XYZ import _a as a 
from XYZ._a import _d as d 
XYZ.a.d = d 

a.d.foo() #works 

TL;博士換句話說

from XYZ import _a as a 

(幾乎)一樣

from XYZ import _a 
a = _a 

,因爲別名僅存在於當前模塊範圍中,即進行導入的模塊。