【发布时间】:2017-01-23 00:59:25
【问题描述】:
我正在清理我继承的一些 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.factory 和 objects.foo 工作,但 package.api.factory 不会。
【问题讨论】:
标签: python circular-dependency