这是我再次陷入循环的一个案例,我快要疯了。
我希望Python能够首先分析所有文件,以便从一开始就知道所有标识符(就像Java那样)。
我有一个“main.py”和一个“gui.py”。每个文件都包含一个类,该类使用另一个文件中的类。当我尝试运行“main.py”时,解释器会导入“gui”,然后在“gui.py”中导入“main”,然后处理整个主模块并说:“嘿嘿,gui.py中没有给定名称的类。”
如何在Python中处理循环依赖关系,最小化麻烦?
我觉得把这个扩展成答案而不是评论会更好。
值得注意的是,循环引用通常是糟糕设计的标志:与其要求语言适合您的设计,为什么不改变设计呢?
在Python中有解决此问题的方法:
import
语句移动到不同的作用域中。但是,不,您无法预解析文件。 这不是Python的工作方式,如果您深入了解Python的工作原理,显然就可以知道为什么。
如果无法避免循环导入,请将其中一个导入移出模块级别的作用域,并移到使用它的方法/函数中。
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."
正如其他人指出的那样,这是一种代码气味,但有时即使很丑也需要完成某些事情。
from . import stuff
表示法,它完全拒绝允许循环导入。但将导入放在使用它的方法内可以解决这个问题。 - Jack O'Connor