python - 循环内部引用子模块

标签 python python-3.x

字词

结构如下:一个模块test包含两个子模块test.footest.bar

test.foo 有一个函数 inc() 使用 test.bar.bar() 所以基于 python 文档 从。 import bar 是包含它的正确方法,它按预期工作。

test.bar 但是,还有一个函数 inc2 使用 test.foo.foo,但是当 from .使用 import foo 时,这两个模块都会中断。

实现此目标的正确方法是什么?我在 python 文档或搜索中发现的很少。

代码

测试/_初始化_.py

#empty

测试/foo.py

from . import bar

def foo():
    print("I do foo")

def inc():
    print(bar.bar())

测试/bar.py

from . import foo

def bar():
    print("I do bar")

def inc2():
    print(foo.foo())

错误 1

>>> import test.foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test/foo.py", line 1, in <module>
    from . import bar
  File "test/bar.py", line 1, in <module>
    from . import foo
ImportError: cannot import name foo

错误 2

>>> import test.bar
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test/bar.py", line 1, in <module>
    from . import foo
  File "test/foo.py", line 1, in <module>
    from . import bar
ImportError: cannot import name bar

最佳答案

解决方案是将两个模块所需的代码提取到第三个模块中,该模块由两个模块导入。例如,将 foo 函数放入第三个模块。

以前有很多关于此的 StackOverflow 问题,例如 Circular import dependency in Python .另见 http://effbot.org/zone/import-confusion.htm#circular-imports .

关于python - 循环内部引用子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11598443/

相关文章:

python - 在2.4版本的Tensorflow中,我们应该在pip安装tensorflow后单独做tensorflow-gpu吗?

python - 为什么这个 Delphi DLL 在从 Python 调用时抛出 WindowsError?

python - 调用嵌套在类中的方法

python - 最简单的视频流?

python - 如何用导航栏安排框架的布局

python-3.x - 如何使图像对比度更高,灰度然后使用 PIL 和 pytesseract 准确获取所有字符?

python - 如何将 pygame 窗口固定在顶部?

python - psycopg2没有错误但未插入数据库

python - Tweepy 在使用 Twitter API v2 方法时不返回 url 媒体字段

python - 匹配哈希+加盐密码