用于循环导入的 python 解决方法

标签 python python-2.7 import module circular-dependency

好的,就是这样。

我宁愿不放弃我的代码,但如果你真的需要它,我会的。我有两个模块彼此需要一点。这些模块称为 webhandler 和 datahandler。

在 webhandler 中我有一行:

import datahandler 

在数据处理程序中我还有另一行:

import webhandler

现在我知道这是糟糕的代码,像这样的循环导入会导致代码运行两次(这是我试图避免的)。

然而,datahandler 模块需要访问 webhandler 模块的几个函数,而 webhandler 模块需要访问在 datahandler 模块中生成的几个变量。除了将函数移动到不同的模块之外,我没有看到任何解决方法,但这会破坏我的程序的组织并且对模块命名没有逻辑意义。

有什么帮助吗?

最佳答案

循环依赖是一种代码异味。如果您有两个相互依赖的模块,那么这是一个非常糟糕的迹象,您应该重构您的代码。

有几种不同的方法可以做到这一点;哪个最好取决于您在做什么,以及每个模块的哪些部分实际被另一个模块使用。

  • 一个非常简单的解决方案是合并两个模块,这样您就只有一个模块,它只依赖于它自己,或者更确切地说,它依赖于它自己的内容。这很简单,但由于您之前已经分离模块,因此您可能会以这种方式引入新问题,因为您不再需要分离关注点。
  • 另一个解决方案是确保依赖项确实是必需的。如果一个模块只有几个部分依赖于另一个,也许你可以以不再需要循环依赖的方式移动这些位,或者 utilize the way imports work使循环依赖不再是问题。
  • 更好的解决方案可能是将依赖项移动到一个单独的新模块中。如果命名真的是最难的问题,那么你可能做对了。它可能“破坏[你的]程序的组织”但由于你有循环依赖,无论如何你的设置存在一些固有的错误。

关于用于循环导入的 python 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31392035/

相关文章:

PostgreSQL:从转储恢复数据库 - 语法错误

java - 无法导入 java.util.Scanner

python - 转储字典后 csv 文件中缺少值

python - 如何在运行 python 脚本时清除 cmd/terminal

excel - 从 Excel 导入数据进行 Access 时,外部数据库驱动程序出现意外错误 (1)

python - 如何在 python 中将对象作为命令行参数传递?

python - Gtk 3 python 入口颜色

python - 在 OSX 启动时运行 Python 脚本

python - 在 Python 上编写计算器

Python合并两个字典