避免包装中的循环依赖

时间:2017-01-23 00:59:25

标签: python circular-dependency

我正在清理我继承的一些Python(2.7)代码,并且遇到了我想要摆脱的循环导入场景。当前运行的代码(通过滥用导入功能),但是当其他代码无法以特定方式访问时,它会导致问题。

文件结构基本上是这样的:

/deep/nested/path/__init__.py
/deep/nested/path/objects.py
/deep/nested/path/api.py

objects是数据模型的集合

api向开发人员界面公开了获取/创建objects实例的函数。

发生循环导入是因为某些objects需要调用api函数来创建子对象。

这段代码处理分析并执行很多(很多对象,深度递归)。包名称空间也是相当嵌套的 - 因此使用包路径会对性能产生切实影响。

我很想将objects所需的工厂功能移到该文件中,然后将它们导回api以供一般使用。这将解决我的问题(并消除一个点),但失去一些代码组织(实际上相当不错)。我希望有另一双眼睛给予一些投入。

虽然这里已经有几个关于循环导入的问题,但我并不关心让它开始工作(它确实如此)。我关心的是最小化点符号。 api.factoryobjects.foo工作,但package.api.factory不会。

1 个答案:

答案 0 :(得分:0)

或许最好将这些工厂功能转移到第三个 模块。然后objects可以导入它以创建其对象; api可以 如果需要,导入它;如果他们需要它,其他模块可以导入它 包含。