gpt4 book ai didi

python - 另一个导入完成后,导入的函数不再起作用

转载 作者:行者123 更新时间:2023-12-04 16:58:02 24 4
gpt4 key购买 nike

所以这就是我正在处理的:

I have a module A, where

  • submodule A.B contains a function called "func1"
  • submodule A.B.C contains a function called "func2"

I also have a separate module B with an class C

Lastly, A.B.func1 uses class C from module B, through the import statement "from B import C"


到目前为止我学到的是,如果我只是这样做:
from A.B import func1
func1 将工作。
但是,如果我要这样做:
from A.B import func1
from A.B.C import func2
func1 将不起作用。
在挖掘并尝试了一些东西之后,我发现 A.B.func1 对 C 的使用会查看 func1 的全局变量来找到 C(通过它的“从 B 导入 C”放在那里)。但是,当执行“from A.B.C import func2”时,全局变量中的 C 条目会被覆盖。基本上,我同时拥有 A.B.C 和 B.C 的事实混淆了全局命名空间,从而导致了这种意外失败,尽管在每个模块中,代码看起来都是正确的。
但是,我不知道如何防止将来发生这种情况。我应该遵循哪些命名规则/约定来防止此类情况发生?一个彻底的解决方案可能是确保你永远不会有两个同名的子模块,但我想如果有一个足够大的库系统,这可能很难维护。在这种情况下,其他人会怎么做?
也许我应该以不同的方式使用导入,并做一些不同于“从...导入...”的事情?
任何意见/帮助将不胜感激。

最佳答案

这看起来像循环导入,通常您需要更好地构建项目来避免这种情况。如果必须这样做,则需要进行本地导入。另一方面,如果您有命名冲突,最简单的方法就是:

import A

然后用 A.B.fun* 调用函数

关于python - 另一个导入完成后,导入的函数不再起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17666566/

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