2017-07-18 10 views
0

ich folgend in Python, wo XYZ, _a und _d sind Pakete und foo() ist definiert innerhalb _d tun will:Python verschachtelt Import alias

XYZ._a._d.foo() 

Allerdings mag ich alias _a an einem und _d zu d, so dass ich es nennen mag:

a.d.foo() 

ich habe versucht, den folgenden zu tun, aber es scheint, das Aliasing nicht wirksam ist, um die Art, wie ich erwartete, und es sagt „Nein Modul mit dem Namen a“. Gibt es einen Weg, dies zu erreichen?

Antwort

0

Da die Import-Aliase im aktuellen Modul und nicht im _d-Modul definiert sind, können Sie dies nicht intuitiv tun. Der Zweck von Aliasing besteht darin, dem aktuellen Modul den Zugriff auf das tiefe Modul zu erleichtern.

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 

, wenn Sie den _a Namespace ändern wollen, müssen Sie es einrichten dort direkt

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

a.d.foo() #works 

tl; dr mit anderen Worten

from XYZ import _a as a 

ist (fast) das gleiche wie

from XYZ import _a 
a = _a 

in dem der Alias ​​nur im aktuellen Modulbereich existiert, das Modul das den Import durchführt.