如何在python中打破导入循环

How to Break Import Loop in python

在这种情况下,有两个相关的大型Python类,因此我将它们放在单独的文件中。假设课程是眼镜蛇和老鼠。

现在需要从眼镜蛇的方法中调用老鼠的方法,反之亦然。为此,我需要在rat.py中导入cobra,在cobra.py中导入rat。

这将创建一个导入循环并给出一个错误。无法在COBRA中导入COBRA。

如何解决这个问题??

上一年度眼镜蛇:

1
2
3
4
5
import Rat
class Cobra():
    def check_prey(self, rat ):
        # Some logic
        rat.foo()

大鼠Py:

1
2
3
4
5
import Cobra
class Rat():
    def check_predator(self, snake ):
        # some_logic ..
        snake.foo()


如果在RAT的类定义中不使用COBRA,或者相反,也就是说只在方法内部使用COBRA,那么实际上可以将import语句移动到文件的底部,到那时类定义就已经存在了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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()

或者您也可以限制导入的范围

1
2
3
4
5
6
7
8
9
10
11
12
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或桩实例中存在属性和函数,python就不关心它们来自哪个类。

一般来说,没有完全可靠的方法来避免导入循环,您所能做的最好的就是重构代码并执行上面提到的一些操作。