如何处理Python中的循环导入问题?
在我们的项目中,有一个叫做“控制”的层级,里面有几个模块,比如“网格”、“网格单元”、“组合”等等。网格模块需要引入网格单元模块,因为网格是由单元格组成的,而任何单元格里面都可以放一个组合。所以一开始我们在这些类里面使用“from ... import ...”的方式来引入模块,像这样:
#grid.py
from controls.gridcell import cell
#gridcell.py
from controls.combo import combo
这在我们使用网格的时候还没问题,但当我们开始把网格作为组合的内容时,就出现了问题。我们需要在“combo.py”文件里添加“from grid import grid”这行代码。结果就出现了一个导入异常:
from controls.gridcell import gridcell
ImportError: Cannot import name gridcell
更新:
我也试过用“import ... as ...”的方式,但也出现了以下错误:
import controls.gridcell as gridcell
AttributeError: 'module' object has no attribute 'gridcell'
我看了好几篇文章,发现解决这个问题的方法就是使用不带“from”的“import”语句,比如:
#grid.py
import controls.gridcell
#gridcell.py
import controls.combo
#combo.py
import controls.grid
但这样的话,我们就得用全名,比如“controls.gridcell.cell”、“controls.combo.combo”、“controls.grid.grid”等等。
所以我想问,有没有其他方法可以让我们用更短的名字,还是说这就是解决这个问题的唯一方法?
抱歉如果我漏掉了什么。
谢谢大家!
2 个回答
4
你也可以把导入的库放到函数里面。
def foo():
from controls.gridcell import cell
from controls.combo import combo
如果你有一个 init()
函数,这样做会很方便。
9
import controls.gridcell as gridcell
等等等等等等。