c# - 循环依赖 C# 项目与 Python 包

标签 c# python package circular-dependency

在 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/

相关文章:

c# - 如何绘制带有标记(线段连接点)的路径?

python - lighttpd、mod_rewrite 和 web.py 意外行为

javascript - Python 'is' 与 JavaScript ===

database - Android:是否可以访问与我的应用程序 bundle 在一起的 sqlite 文件?

linux - 创建 .deb 包 - 无法获取依赖项

c# - 如何向 IdentityServer LogoutRequest 模型添加参数?

c# - 在使用 LINQ 时,我们是否为了实现代码可读性而牺牲了性能?

c# - 有没有更好的方法来做一个对象列表?

python - 使 Python 文件中的 HTTP 服务器继承与命令行版本相同的参数

import - Ada:导入不等式运算符 "/="