0%

python的循环引用问题

python的循环引用

什么是循环引用

最近写代码遇见了几次python的循环调用问题,主要原因肯定是编码不规范,应该是共同调用的代码抽离出来重新封装,而不是B里面有A需要的代码,同时A里面也有B需要的代码,这样交叉引用python就会报错

当我们import一个python文件时,python会首先去查找这个文件之前是否被import过,如果这个文件之前有被import过,就不会重新再import一次。否则会倒入,并执行一边代码。

python核心编程这本书也说过这个问题:

加载模块会导致这个模块被执行。也就是被执行模块的顶层代码将直接被执行。这通常包含设定全局变量以及类和函数的声明。一个模块只被加载一次,无论它被导入多少次。这可以阻止多重导入时代码被多次执行

如何解决

1、最好的解决方案当然是抽离出来公用函数,重新封装。防止循环引用

2、 解决方案1
from common.xx import GetR****
修改为:from common.xx import *

3、解决方案2
把import放在函数里面 需要用到的时候在import
这个仅是权宜之计。

4、解决方案3
直接倒入模块名,需要的函数由模块名调用
import

5、解决方案4
使用TYPE_CHECKING

1
2
if TYPE_CHECKING:
from models import a

参考链接


采用署名-非商业性使用-相同方式共享 4.0(CC BY-NC-SA 4.0)许可协议
「分享也是一种学习」