代码版本:3.6.3
Python不存在循环导包问题,或者说那些被称之为循环导包问题的真正原因不是循环,真正原因是在使用一个对象的时候还没有获取到这个对象(从报错信息也能看出这一点)。
不管是直接import还是from格式的导包,Python都只加载一次被导的包,以后即使再有导包语句也不会真正的加载那个包,只会去已经加载过的地方去寻找想要的对象。(Python可以实现真正重新导入)
不仅进行具体的操作是使用对象,`from xx import x`也算作对`x`对象的使用。
配合上面的叙述理解下面这个例子,以后就对这类问题的原因和避免就没问题了。
三个.py文件内容如下,运行b.py会报错,而a.py和c.py能正常运行。
# --- a.py ---
import b
life = 'bst'
# 结果:
# bst
# --- b.py ---
import a
print(a.life)
# 结果:
# ...
# AttributeError: module 'a' has no attribute 'life'
# --- c.py ---
import b
# 结果:
# bst