如何解决如何导入导入父模块的子模块?
我的模块结构如下:
/parent
-- __init__.py
-- /child
---- __init__.py
我想在child
中导入parent
,反之亦然,即:
/ parent / init .py:
import child
/ parent / child / init .py:
import parent
但是当我这样做的时候我得到了错误No module named 'parent' in parent/child/__init__.py
解决方法
由于代码中模块的循环依赖性,您遇到了该错误。
当python尝试初始化parent
模块时,它会看到import child
语句,该语句将解释器引导至child
模块,(请注意,parent
模块未初始化现在)在子模块import parent
中遇到了行,但是由于父模块尚未初始化,解释器将因找不到parent
模块的错误而失败。
理想情况下,您应该修复循环导入以解决此问题,但是可以克服将导入移至后期而不是将其添加到文件顶部的问题。 (例如:您可以在实际使用子模块的方法中添加import语句。)但不建议这样做。
,在将其导入子级之前添加父级路径,这样可以找到父级模块
sys.path.append(os.path.abspath('..'))
,
不良设计提醒
圆形进口问题可能表明设计不良
解决方案
您的进口商品不能同时处于顶级水平。
# /parent/child/init.py:
import parent # <-- top level
# /parent/init.py:
import .child # <-- also top level
常用模式是将其中一个导入移动到使用它的位置(但不在顶层,lul),例如:
# /parent/child/init.py:
def dupa():
import parent # <-- not top level
parent.foo()
另请参见
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。