我有一个情况,有两个相关的大型python类,因此我把它们放在单独的文件中。让我们说课程是Cobra和Rat。
现在需要从Cobra的方法调用Rat的方法,反之亦然。 为此,我需要在Rat.py中输入Cobra,在Cobra.py中输入Rat
这会创建一个导入循环并发出错误。不能在眼镜蛇内部进口眼镜蛇。
如何解决这个问题?
Cobra.py :
import Rat
class Cobra():
def check_prey(self, rat ):
# Some logic
rat.foo()
Rat.py :
import Cobra
class Rat():
def check_predator(self, snake ):
# some_logic ..
snake.foo()
答案 0 :(得分:29)
如果你没有在Rat的类定义中使用Cobra,反之亦然,即只在内部方法中使用,那么你实际上可以将import语句移动到文件的底部,这时类定义已经存在。
Class Cobra:
...
def check_prey(self, rat ):
Some logic rat.foo()
import Rat
import Cobra
class Rat
...
def check_predator(self, snake ):
some_logic ..
snake.foo()
或者您也可以限制导入的范围
Class Cobra:
...
def check_prey(self, rat ):
import Rat
Some logic rat.foo()
import Cobra
class Rat
...
def check_predator(self, snake ):
some_logic ..
snake.foo()
如果你不直接使用Rat和Cobra类名,那么你甚至根本不需要import语句,只要rat或stake实例中存在属性和函数,python就不在乎了他们来自哪个班级。
一般来说,没有完全证明避免导入循环的方法,你可以做的最好的事情是重构代码并完成上面提到的一些事情。