首页 > 解决方案 > 使用循环导入构建模块 API 的 Pythonic 方式

问题描述

我应该如何解决以下循环依赖?

我有一个文件 A,它公开 API 方法并将所有后端逻辑委托给一个单独的文件 A_impl。

在 A.py 中,我还公开了一个 Enum,客户端需要将其作为参数传递给一些 API 方法:

# A.py
import A_impl

class MyEnum(Enum):
    ONE = 1
    TWO = 2
    THREE = 3

def A(x: MyEnum):
    return A_impl._A(x)

A_impl 实际上需要 MyEnum:

#A_impl.py
from A import MyEnum

def _A(x: MyEnum):
    pass

解决此问题的一种方法是将两个模块合并在一起,但这违背了将其拆分以首先获得更清晰代码的目的。A_impl 由数十个辅助函数组成,将公共和私有方法放在一个模块中变得很混乱。

标签: pythonpython-3.xcircular-dependency

解决方案


A_impl您可以在定义中导入A

# A.py

class MyEnum(Enum):
    ONE = 1
    TWO = 2
    THREE = 3

def A(x: MyEnum):
    import A_impl
    return A_impl._A(x)

推荐阅读