如何在python中打破导入循环

时间:2011-08-26 02:37:20

标签: python

我有一个情况,有两个相关的大型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()

1 个答案:

答案 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就不在乎了他们来自哪个班级。

一般来说,没有完全证明避免导入循环的方法,你可以做的最好的事情是重构代码并完成上面提到的一些事情。