处理循环依赖于Python模块?(Handle circular dependencies in P

2019-06-23 13:42发布

这又是在那里我手忙脚乱的情况下,我即将去野外。

我希望的Python会分析所有文件在第一,所以它会知道,从一开始的所有标识符(我觉得像Java一样)。

我有一个“main.py”和“gui.py”。 每个文件包含一个类,这使得在其他文件中使用的类。 当我尝试运行“main.py”,解释进口“鬼”,然后在“gui.py”它进口的“主”,那么它处理整个主模块,并说:三通熙”,没有课在gui.py.赐名”

我该如何处理在Python循环依赖以最小的大惊小怪

Answer 1:

我想我会扩展成一个答案,而不是评论这个。

值得一提的是圆形的进口通常是不好的设计的标志 :而不是苛刻的语言适合您的设计,为什么不改变这种设计?

有周围蟒蛇这个问题的方法 :

  • 好选项:重构代码不使用圆形进口。
  • 坏的选择:将你的一个import语句到不同的范围。

但是,没有,你不能预先解析文件。 这不是Python的工作方式,如果你看看Python中是如何工作的,这是很明显的原因。



Answer 2:

如果无法避免循环进口,将进口的三分之一的模块级范围,进入方法/函数的地方使用。

filea.py

import fileb

def filea_thing():
    return "Hello"

def other_thing():
    return fileb_thing()[:10]

fileb.py

def fileb_thing():
    import filea
    return filea.filea_thing() + " everyone."

这样一来,FILEA交易只会当你调用fileb_thing(),然后将其reimports FILEB,但由于fileb_thing没有得到在这一点上叫,你不坚持循环各地进口。

正如其他人所指出的那样,这是一个代码味道,但有时你需要得到的东西做,即使它的丑陋。



Answer 3:

在一般情况下,依赖关系应该是一棵树。 循环依赖是无法解析。

要解决这个问题的常用方法,虽然是在比全局命名空间以外的水平做所需模块的“本地导入”。



文章来源: Handle circular dependencies in Python modules?