美文网首页
再谈python中的引用

再谈python中的引用

作者: alanhoo74 | 来源:发表于2020-09-26 17:20 被阅读0次

最近在开发项目中,遇到一个文件,类似循环引用,但又不完全是。

形式如下,有两套一样的模块逻辑,每套都有一个run.py,还有一个pack.py,两个pack.py都引用了ref_comm.py模块。

#run1.py
import pack1
if __name__ == "__main__":
    print("run 1")
#run2.py
import pack1
if __name__ == "__main__":
    print("run 2")
#pack1.py
from ref_comm import C1
#pack2.py
from ref_comm import C2
#ref_comm.py

import pack1
import pack2

class C1:
    pass

class C2:
    pass

在ref_comm.py中使用import pack1和pack2,会对运行造成影响:例如运行run1.py,需要注释掉ref_comm.py中的import pack2,否则运行报错,说找不到pack2.C2。

ImportError: cannot import name 'C2' from partially initialized module 'ref_comm' (most likely due to a circular import)

一直以为是循环引用的问题,但是这里应该不完全是,主要是加载不完整导致的无法应用。

运行run1时,引用pack1,接着引用ref_comm,然后ref_comm反过来引用pack2,pack2又引用ref_comm里的C2,但是这使ref_comm尚未加载完成,C2还无法引用,所以pack2的执行就终止报错了。

如果把ref_comm.py里的import都挪到class C2定义的下方,运行就没有问题了,这也从侧面证实了问题产生的原因。

相关文章

  • 再谈python中的引用

    最近在开发项目中,遇到一个文件,类似循环引用,但又不完全是。 形式如下,有两套一样的模块逻辑,每套都有一个run....

  • 再谈引用

    引用成为习惯,改起来非常难。 许多人以为自己引用得很精彩,那是因为他们读书少。对于读书多的人来说,你引用都是陈词滥...

  • Python 中的引用

    像 Python、JavaScript 这类的动态语言,基本上都是使用引用赋值的,不管是基本数据类型,还是复杂的数...

  • Python是如何进行内存管理的

    Python引入了一个机制:引用计数。 python内部使用引用计数,来保持追踪内存中的对象,Python内部记录...

  • python是如何进行内存管理的

    Python引入了一个机制:引用计数。 python内部使用引用计数,来保持追踪内存中的对象,Python内部记录...

  • 再谈Java引用

    *** 无论是通过引用计数算法来判断对象的引用数量,还是通过可达性分析算法来判断对象的引用链是否可达,判定对象是否...

  • python面试题之Python是如何进行内存管理的

    python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被...

  • python中引用c

    首先先写个test.c文件 然后运行指令进行编译gcc -o test.so -shared -fPIC test...

  • Day11-Python垃圾回收机制笔记

    Python中的垃圾回收是以引用计数为主,标记清除和分代回收为辅。 【引用计数】 Python默认的垃圾收集机制是...

  • Python中的引用赋值,深拷贝,浅拷贝

    摘要:Python,引用赋值,深拷贝,浅拷贝 总结一下Python中的变量的引用赋值,深拷贝和浅拷贝,先上结论 赋...

网友评论

      本文标题:再谈python中的引用

      本文链接:https://www.haomeiwen.com/subject/gjzcuktx.html