2024-04-25 22:54:38 发布
网友
我想我应该把它扩展成一个答案而不是一个评论。
值得注意的是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在那一点上没有被调用,所以您不会一直循环。
正如其他人所指出的,这是一种代码味道,但有时你需要做一些事情,即使它很难看。
我想我应该把它扩展成一个答案而不是一个评论。
值得注意的是circular imports are generally a sign of bad design:与其要求语言适合您的设计,为什么不更改该设计?
有ways around this problem in python:
import
语句移到另一个作用域。但不,你不能预先分析文件。这不是Python的工作方式,如果你研究Python的工作方式,很明显的原因。
一般来说,依赖项应该是一棵树。循环依赖项不可解析。
不过,解决这个问题的通常方法是在全局命名空间以外的级别上对所需模块执行“本地导入”。
如果无法避免循环导入,请将其中一个导入移出模块级范围,并移到使用它的方法/函数中。
菲拉.py
文件副本
这样,当您调用fileb_thing()时,filea才会被导入,然后它会重新导入fileb,但是由于fileb_thing在那一点上没有被调用,所以您不会一直循环。
正如其他人所指出的,这是一种代码味道,但有时你需要做一些事情,即使它很难看。
相关问题 更多 >
编程相关推荐