Python模块之间的相互引用冲突问题
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
异常
python交叉循环引用即在a中调用b同时b中又调用a会引发相互引用的冲突。
A、B、C三个py文件文件中定义了方法或者变量
A文件中 from B import b
B文件中 from A import a
C文件中 from A import a
异常ImportError cannot import name ‘goods_bp’ from partially initialized module ‘goods’ (most likely due to a circular import)
提示循环导入
解决办法一
规划好代码的层级
哪些是公共方法哪些是业务逻辑把这些提前想好有利于后期的维护。
为了要解决这个问题需要先理解在python中使用import时代码到底是如何运行的
当我们import一个文件时python会首先去查找这个文件之前是否被import过如果这个文件之前有被import过就不会重新再import一次。
所以如果A模块代码里import了B模块并且B模块里又import了A模块python的执行顺序会变成这样开始执行模块A当A执行到import B的地方则停止执行A模块后面的代码转而开始执行B模块的代码当B模块从头执行到import A的地方时python此时并不会回过头去接着执行A剩余的代码而且将A模块在中断前已经初始化的属性全加载到B模块中。
了解了import的执行过程那么就可以给出相应的解决方案了
在module的顶部引入引入another module绝对引入
在module底部引入another module的attribute而非another module用from
函数顶部引入可以用from
解决方法二
不要使用A和B互相导入的写法可以再新建一个python文件存放例如
新建一个D文件将A、B文件的变量移动至D文件中
修改A文件导入为 from D import b
修改B文件导入为 from D import a
————————————————