如何在python中打破导入循环



我有一个情况,有两个相关的大型python类,因此我把它们放在单独的文件中。假设类是Cobra和Rat。

现在需要从Cobra的方法中调用Rat的方法,反之亦然。为此,我需要在Rat.py中导入Cobra,在Cobra.py

中导入Rat。

这会创建一个import循环并给出一个错误。不能在眼镜蛇中导入眼镜蛇

如何解决这个问题??

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()

如果你不在Rat的类定义中使用Cobra,反之亦然(即只在方法中使用),那么你实际上可以将import语句移到文件的底部,到那时类定义已经存在了。

# Cobra.py
class Cobra:
    # ...
    def check_prey(self, rat):
        # some logic
        rat.foo()
    
import Rat
# Rat.py
import Cobra
class Rat:
    # ...
    def check_predator(self, snake):
       # some_logic ..
       snake.foo()

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

# Cobra.py
class Cobra:
    # ...
    def check_prey(self, rat):
        import Rat
        # some logic
        rat.foo()
# Rat.py
import Cobra
class Rat:
    # ...
    def check_predator(self, snake):
       # some_logic ..
       snake.foo()

如果你不直接使用RatCobra类名,那么你甚至根本不需要import语句:只要属性和函数存在于ratsnake实例中,Python就不关心它们来自哪个类。

一般来说,没有万无一失的方法来避免import循环。你能做的最好的事情就是重构你的代码,做一些我上面提到的事情。

相关内容

  • 没有找到相关文章

最新更新