python嵌套导入别名

2024-03-29 09:25:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在python中执行以下操作,其中XYZ、\u a和\u d是包,foo()在\u d中定义:

XYZ._a._d.foo()

不过,我想把∗a化名为a,把∗d化名为d,这样我就可以这样称呼它:

a.d.foo()

我试着做了以下工作,但似乎别名并没有按我预期的方式生效,它说“没有名为a的模块”。有办法做到这一点吗?你知道吗

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

a.d.foo()

Tags: 模块fromimport定义fooas方式xyz
1条回答
网友
1楼 · 发布于 2024-03-29 09:25:20

由于导入别名是在当前模块中定义的,而不是在\u 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;DR,换句话说:

from XYZ import _a as a 

和…差不多吗

from XYZ import _a
a = _a

由于别名只存在于当前模块作用域中,因此执行导入操作的模块。你知道吗

相关问题 更多 >