gpt4 book ai didi

Python: "import ... as"导致引用不正确

转载 作者:行者123 更新时间:2023-11-28 19:32:11 27 4
gpt4 key购买 nike

我注意到 python 处理模块名称的方式有一个奇怪的行为。

如果我写:

import a.b
import a

然后尝试引用模块 a.b 中的内容,它可以正常工作。

但是,如果我尝试的只是略有不同:

import a.b
import c as a

然后尝试引用模块 a.b 中的内容,我收到错误消息:

AttributeError: 'module' object has no attribute 'b'

我明白,显而易见的解决方案就是不要让两个不同的模块同名。但是,我仍然很好奇是什么导致了这种行为变化。为什么一个有效而另一个无效?

最佳答案

为什么您希望它起作用?所有 4 个导入语句都是对变量 a 的赋值.因此,如果您分配 ca , 它用没有 .b 的东西覆盖内容属性。


这是第一种情况下发生的情况:

  1. 何时import a.b运行,Python 加载模块 a , 然后加载模块 a.b进入加载a模块的属性 b .然后它将结果分配给变量 a .
  2. import a不导入任何新内容,因为模块 a已经加载。它只是重新分配来自 sys.modules['a'] 的相同模块至 a .

这是第二种情况:

  1. 何时import a.b运行,Python 加载模块 a , 然后加载模块 a.b进入加载a模块的属性 b .然后它将结果分配给变量 a .
  2. 何时import c as a运行,它加载模块 c , 然后将该模块分配给变量 a , 覆盖 内容 ( a = sys.modules['c'] )。您可以通过比较 sys.modules['a'] 的内容来验证这一点内容为 a - 在这种情况下它们会有所不同。

关于Python: "import ... as"导致引用不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12762153/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com