通过循环导入构建模块 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由数十个帮助程序函数组成,将公共和私有方法放入一个模块中变得越来越混乱。

您可以在A的定义中导入A_impl

# A.py
class MyEnum(Enum):
ONE = 1
TWO = 2
THREE = 3
def A(x: MyEnum):
import A_impl
return A_impl._A(x)

最新更新