python - 使用循环导入构建模块 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_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)
推荐阅读
- xml - 使用postgresql查询获取xmlns数据的数组属性的值和索引
- excel - 使用 Excel 公式计算打开的天数记录
- hibernate - @ManyToMany,使用视图
- r - 在嵌套的 tibble 上变异
- splunk - Splunk 可查找表
- apache-kafka - 由于代理关闭,流的更改日志和重新分区分区的子集不可用 - 流应该如何表现?
- node.js - 我可以在 Jasmine node.js 中创建自己的成功响应吗?
- excel - 在工作表中查找多个范围
- jenkins - 在开发服务器中推送代码时如何触发执行自动化测试脚本的詹金斯作业?
- java - Tomcat - 有没有办法喷出尚未响应的当前/活动请求?