使用循环导入的Pythonic方法来构建模块API

时间:2018-10-10 00:49:23

标签: python python-3.x circular-dependency

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

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

在A.py中,我还公开了一个枚举,客户端需要将该枚举作为参数传递给某些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由数十个辅助函数组成,将公共方法和私有方法放在一个模块中变得一团糟。

1 个答案:

答案 0 :(得分:3)

您可以改为在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)