我正在清理我继承的一些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
不会。
答案 0 :(得分:0)
或许最好将这些工厂功能转移到第三个
模块。然后objects
可以导入它以创建其对象; api
可以
如果需要,导入它;如果他们需要它,其他模块可以导入它
包含。