Python模块的交叉引用问题

Posted 金庆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python模块的交叉引用问题相关的知识,希望对你有一定的参考价值。

Python模块的交叉引用问题

解读:
How can I have modules that mutually import each other?

有下面两个文件相互引用,Python解释器报错。

foo.py:

from bar import bar_var
foo_var=1

bar.py:

from foo import foo_var
bar_var=2

import foo会产生如下错误:
>>> import foo
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "foo.py", line 1, in ?
    from bar import bar_var
  File "bar.py", line 1, in ?
    from foo import foo_var
ImportError: cannot import name foo_var
>>>

但并非是因为交叉引用而报错,而是引用不存在!
导入一个模块时,发现已经导入,就不会再做一次导入。
from foo import foo_var
相当于运行foo.py, 然后令foo_var = foo.foo_var
这句会发现foo已经导入,但是foo_var=1还没有执行到,
所以bar.foo_var = foo.foo_var就会出错。

解决办法就是不要全局导入,可改为局部作用域内导入。

如果将from XXX import YYY改为import XXX就不会有上述错误了。

以上是关于Python模块的交叉引用问题的主要内容,如果未能解决你的问题,请参考以下文章

python学习[第十九篇] 模块

Python入门之Python引用模块和查找模块路径

python中模块的引用

Python引用模块和查找模块路径

python各个模块循环引用问题解决办法

python如何引用其他模块中类的方法中的变量?