这又是在那里我手忙脚乱的情况下,我即将去野外。
我希望的Python会分析所有文件在第一,所以它会知道,从一开始的所有标识符(我觉得像Java一样)。
我有一个“main.py”和“gui.py”。 每个文件包含一个类,这使得在其他文件中使用的类。 当我尝试运行“main.py”,解释进口“鬼”,然后在“gui.py”它进口的“主”,那么它处理整个主模块,并说:三通熙”,没有课在gui.py.赐名”
我该如何处理在Python循环依赖以最小的大惊小怪 ?
这又是在那里我手忙脚乱的情况下,我即将去野外。
我希望的Python会分析所有文件在第一,所以它会知道,从一开始的所有标识符(我觉得像Java一样)。
我有一个“main.py”和“gui.py”。 每个文件包含一个类,这使得在其他文件中使用的类。 当我尝试运行“main.py”,解释进口“鬼”,然后在“gui.py”它进口的“主”,那么它处理整个主模块,并说:三通熙”,没有课在gui.py.赐名”
我该如何处理在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."
这样一来,FILEA交易只会当你调用fileb_thing(),然后将其reimports FILEB,但由于fileb_thing没有得到在这一点上叫,你不坚持循环各地进口。
正如其他人所指出的那样,这是一个代码味道,但有时你需要得到的东西做,即使它的丑陋。
在一般情况下,依赖关系应该是一棵树。 循环依赖是无法解析。
要解决这个问题的常用方法,虽然是在比全局命名空间以外的水平做所需模块的“本地导入”。