【问题标题】:avoiding a circular dependency in packaging避免包装中的循环依赖
【发布时间】: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.factoryobjects.foo 工作,但 package.api.factory 不会。

【问题讨论】:

    标签: python circular-dependency


    【解决方案1】:

    也许将这些工厂函数移到第三个会更好 模块。然后objects 可以导入它来创建它的对象; api可以 如果需要,导入它;其他模块可以根据需要导入它 包含。

    【讨论】:

      猜你喜欢
      • 2013-02-06
      • 1970-01-01
      • 2012-02-15
      • 2020-02-13
      • 2012-08-10
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多