首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中如何打破导入循环

python中如何打破导入循环
EN

Stack Overflow用户
提问于 2011-08-26 02:37:19
回答 1查看 41.1K关注 0票数 30

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

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

这将创建一个导入循环并给出一个错误。不能进口眼镜蛇内眼镜蛇。

怎么解决这个??

Cobra.py

代码语言:javascript
复制
import Rat
class Cobra():
    def check_prey(self, rat ):
        # Some logic 
        rat.foo()

Rat.py

代码语言:javascript
复制
import Cobra
class Rat():
    def check_predator(self, snake ):
        # some_logic ..
        snake.foo()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-26 02:46:28

如果您不在Rat的类定义中使用Rat,或者反之亦然(即仅在方法内部使用),那么您实际上可以将导入语句移到文件的底部,到那时类定义就已经存在了。

代码语言:javascript
复制
# Cobra.py
class Cobra:
    # ...
    def check_prey(self, rat):
        # some logic
        rat.foo()
    
import Rat
代码语言:javascript
复制
# Rat.py
import Cobra
class Rat:
    # ...
    def check_predator(self, snake):
       # some_logic ..
       snake.foo()

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

代码语言:javascript
复制
# Cobra.py
class Cobra:
    # ...
    def check_prey(self, rat):
        import Rat
        # some logic
        rat.foo()
代码语言:javascript
复制
# Rat.py
import Cobra
class Rat:
    # ...
    def check_predator(self, snake):
       # some_logic ..
       snake.foo()

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

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

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7199466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档