在Python模块中处理循环依赖关系?

2024-04-25 22:54:38 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

我想我应该把它扩展成一个答案而不是一个评论。

值得注意的是circular imports are generally a sign of bad design:与其要求语言适合您的设计,为什么不更改该设计?

ways around this problem in python

  • 好的选择是:重构代码以避免使用循环导入。
  • 错误的选项是:将一个import语句移到另一个作用域。

但不,你不能预先分析文件。这不是Python的工作方式,如果你研究Python的工作方式,很明显的原因。

一般来说,依赖项应该是一棵树。循环依赖项不可解析。

不过,解决这个问题的通常方法是在全局命名空间以外的级别上对所需模块执行“本地导入”。

如果无法避免循环导入,请将其中一个导入移出模块级范围,并移到使用它的方法/函数中。

菲拉.py

import fileb

def filea_thing():
    return "Hello"

def other_thing():
    return fileb_thing()[:10]

文件副本

def fileb_thing():
    import filea
    return filea.filea_thing() + " everyone."

这样,当您调用fileb_thing()时,filea才会被导入,然后它会重新导入fileb,但是由于fileb_thing在那一点上没有被调用,所以您不会一直循环。

正如其他人所指出的,这是一种代码味道,但有时你需要做一些事情,即使它很难看。

相关问题 更多 >