尝试找到一个好的和适当的模式来处理Python中的循环依赖模块。通常,解决方案是将其删除(通过重构);但是,在这种特殊情况下,我们真的希望拥有需要循环导入的功能。
编辑:根据下面的答案,这种问题的常规解决方法是重构。但是,出于这个问题的缘故,请假设这不是一个选项(无论出于什么原因)。
问题是logging模块需要configuration模块来获取一些配置数据。然而,对于一些configuration函数,我真的想使用定义在logging模块中的自定义logging函数。显然,在configuration中导入logging模块会引发错误。
我们能想到的可能的解决方案:
1. 不要这样做。正如我之前所说,这不是一个好的选择,除非所有其他可能性都丑陋且不好。 2. Monkey-patch模块。这听起来不错:在初始导入后,在任何函数实际使用之前将logging模块动态加载到configuration中。这意味着定义全局的逐模块变量。 3. 依赖注入。我已经阅读并遇到了依赖注入替代方案(特别是在Java Enterprise空间),它们消除了一些头疼的问题。但是,它们可能过于复杂,难以使用和管理,这是我们想避免的。我不知道Python中的情况如何。
有什么好的方法可以启用此功能?
非常感谢!
编辑:根据下面的答案,这种问题的常规解决方法是重构。但是,出于这个问题的缘故,请假设这不是一个选项(无论出于什么原因)。
问题是logging模块需要configuration模块来获取一些配置数据。然而,对于一些configuration函数,我真的想使用定义在logging模块中的自定义logging函数。显然,在configuration中导入logging模块会引发错误。
我们能想到的可能的解决方案:
1. 不要这样做。正如我之前所说,这不是一个好的选择,除非所有其他可能性都丑陋且不好。 2. Monkey-patch模块。这听起来不错:在初始导入后,在任何函数实际使用之前将logging模块动态加载到configuration中。这意味着定义全局的逐模块变量。 3. 依赖注入。我已经阅读并遇到了依赖注入替代方案(特别是在Java Enterprise空间),它们消除了一些头疼的问题。但是,它们可能过于复杂,难以使用和管理,这是我们想避免的。我不知道Python中的情况如何。
有什么好的方法可以启用此功能?
非常感谢!