【问题标题】:How do you avoid circular imports in Python?如何避免 Python 中的循环导入?
【发布时间】:2014-04-13 06:12:59
【问题描述】:

当您的项目包含两个或更多文件并且最终需要在任何地方导入所有内容时,您如何处理这种情况?

--main.py
---some-stuff.py
---some-stuff2.py

我不能使用循环依赖,但是程序的结构需要它。 除了在一个文件中完成所有工作(包括所有代码)之外,有没有办法管理这种情况?

【问题讨论】:

  • 一般的答案是“让零件不需要彼此了解太多”。在任何特定情况下,您如何做到这一点可能会有所不同。也许有一种方法可以让子任务更加独立。也许您真的可以将必要的信息作为参数传递,而您只是还没有意识到如何去做。也许面向对象的编程会让您更好地管理程序的状态。很难说。
  • 如果你提供一些具体的例子会有所帮助。
  • 听起来您的代码拆分方式很糟糕。我很想先将所有内容复制到 main.py 中,然后再考虑如何将内容移出那里。

标签: python import circular-dependency


【解决方案1】:

标准答案

将数据位作为参数传递给您在some-stuff.py 中调用的函数。

如果您的some-stuff.py 定义了一个函数foo,该函数需要main 中定义的某个字段bar,请将foo 的定义更改为foo(bar, <other args>),并且当您的脚本在main.py 中调用时foo,可以叫foo(bar, <other args>)

解决您的限制

您提到它“无法通过将参数传递给某些东西的函数调用来实现,因为到那时变量可能没有它们的值”。

如果some-stuff 中的函数需要main 中的变量,然后才被赋予值,那么您应该将该函数分解为多个函数,以便在所需值可用之前不会调用该功能。无论如何,这可能会提高代码的模块化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2021-12-04
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多