在 C# 中,代码可以组织成多个项目。假设我有两个项目 ProjectA 和 ProjectB。我可以设置 ProjectB 来引用 ProjectA。一旦我这样做了,ProjectB 中的类就可以使用 ProjectA 中定义的类。但是ProjectA中的类不能使用ProjectB中定义的类,并且ProjectA也不能引用ProjectB。
Python中有类似的东西吗?我认为 python 中的包与 C# 中的项目非常相似。不过,似乎没有什么可以阻止 python 中包之间的循环依赖。我可以在 PackageB 中引用 PackageA 中的模块,同时在 PackageA 中引用 PakcageB 中的模块。这会很快演变成包之间依赖关系的困惑网络。
Python 中是否有结构或工具可以像 C# 中的项目那样防止循环依赖?
最佳答案
Python 允许循环依赖,但它很少有用。
一般来说,两个相互依赖的包不被视为循环依赖,而只是两个模块。例如
moduleB.py
from moduleA import B
class C:
# definition
B.start()
模块A.py
from moduleB import C
class B:
@staticmethod
def start():
# remaining definitions
d = C()
然而,像这里提到的那样的循环依赖是行不通的——默认的导入机制不允许它,你会得到一个错误,或者导入将继续互相调用,直到你遇到堆栈溢出,除非你实现导入钩子(Hook)来解决它。
如果 packageA.moduleA 从 packageB.moduleA 导入某些内容,并且 packageB.moduleB 从 packageA.moduleA 导入内容,这是允许的。
关于c# - 循环依赖 C# 项目与 Python 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52960177/