Python中模块的循环引用

一般来说,在Python中模块的循环引用不是什么好的代码风格。但有时候这很难避免。比如有两个模块a和b,各表达一个业务逻辑,随着业务的发展,a开始依赖于b,因此,在a中引入了模块b,且在a的代码中大量引入了b的调用;后来,业务继续发展,b中也需要调用使用a的逻辑,两个业务有交叉关联关系。消除两个模块的循环依赖优先级并不高。

在 Python 3.5 时,还支持了 relative import。该问题的提出是在 relative import circular problem, 且解决方案为 Modify IMPORT_FROM to fallback on sys.modules 。Relative import 指的是 from a import b 这种形式的模块import。

Relative import的逻辑在 __import__ 中很早就实现了,但 IMPORT_FROM 这种形式的却直到3.5才实现。