gpt4 book ai didi

python - 循环内部引用子模块

转载 作者:太空宇宙 更新时间:2023-11-04 10:53:48 25 4
gpt4 key购买 nike

字词

结构如下:一个模块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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com