c# - 循环依赖 C# 项目与 Python 包
问题描述
在 C# 中,代码可以组织成多个项目。假设我有两个项目 ProjectA 和 ProjectB。我可以设置 ProjectB 来引用 ProjectA。一旦我这样做了,ProjectB 中的类就可以使用 ProjectA 中定义的类。但是ProjectA中的类不能使用ProjectB中定义的类,也不能使ProjectA引用ProjectB。
在 python 中是否有任何等价物?我认为 python 中的包与 C# 中的项目非常等价。不过,似乎没有什么能阻止 python 中包之间的循环依赖。我可以在 PackageA 中的 PackageB 中引用模块,同时在 PakcageB 中的 PackageA 中引用模块。这很快就会演变成一个包之间依赖关系的混乱网络。
python中是否有构造或工具来防止循环依赖,就像项目在c#中所做的那样?
解决方案
答案是否定的:一个包A
无法检测B
到它所依赖的另一个包A
再次导入。这是因为import
如果目标已经在其他地方导入,则不会执行任何代码。
# A/__init__.py
from B import foo
def go(): return foo.real()
# B/foo.py
import A
def use(): return A.go()
def real(): return 42
这是模块之间的直接循环,而不仅仅是包,它仍然有效:如果A
首先导入,B.foo.A
则成为对不完整 A
(不带)的引用,但这在调用go
之前并不重要。use
该不完整的参考是在没有任何通知或检查的情况下创建的A
。
推荐阅读
- python - 我很困惑,类 Card 对象不能手动设置但通过不同的类成功设置
- python - 如何更改多索引 Pandas 数据框中的索引值?
- c++ - 搜索功能中没有返回名称
- javascript - 我如何使用 nativescript 按需加载功能
- javascript - 删除数组/视图中的最后一项时,iOS 上的 react-native-viewpager 问题
- php - 如何从两个表连接中选择一个值?
- javascript - 删除/归还所有角色的静音/取消静音角色
- reactjs - 尝试使用自定义钩子会给出错误“在声明之前使用块范围变量'X'”。
- java - 如何以编程方式获取 Spark 集群中所有节点的主机名
- macos - zsh:权限被拒绝:/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m MacOS