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