试图找到一个好的和适当的模式来处理 Python 中的循环模块依赖。通常,解决方案是删除它(通过重构);但是,在这种特殊情况下,我们真的希望拥有需要循环导入的功能。
编辑:根据下面的答案,此类问题的通常攻击角度将是重构。但是,为了这个问题,假设这不是一个选项(无论出于何种原因)。
问题:
该logging
模块需要该configuration
模块的一些配置数据。但是,对于某些configuration
功能,我真的很想使用logging
模块中定义的自定义日志记录功能。显然,将logging
模块导入configuration
会引发错误。
我们能想到的可能解决方案:
不要这样做。正如我之前所说,这不是一个好的选择,除非所有其他可能性都是丑陋和糟糕的。
猴子补丁模块。这听起来还不错:在初始导入之后和实际使用它的任何功能之前
logging
动态加载模块。不过,这意味着定义全局的、每个模块的变量。configuration
依赖注入。我已经阅读并遇到了依赖注入替代方案(特别是在 Java Enterprise 领域),它们消除了一些令人头疼的问题;但是,它们可能过于复杂而无法使用和管理,这是我们想要避免的。不过,我不知道全景图在 Python 中是如何描述的。
启用此功能的好方法是什么?
非常感谢!