Python中的循环导入依赖

发布于 2021-02-02 23:15:04

假设我具有以下目录结构:

a\
    __init__.py
    b\
        __init__.py
        c\
            __init__.py
            c_file.py
        d\
            __init__.py
            d_file.py

a软件包的中__init__.py,将c导入软件包。但是c_file.py进口a.b.d

程序失败,表示尝试导入b时不存在。(它实际上不存在,因为我们正在导入它。)`c_file.pya.b.d

`如何解决这个问题?

关注者
0
被浏览
61
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    如果a取决于c,而c取决于a,那么它们实际上不是同一单位吗?

    您应该真正检查一下为什么将a和c拆分为两个包,因为您应该将一些代码拆分为另一个包(以使它们都依赖于该新包,而不是彼此依赖),或者应该合并它们一包



  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你可以推迟导入,例如a/__init__.py

    def my_function():
        from a.b.c import Blah
        return Blah()
    

    也就是说,将导入推迟到真正需要之前。但是,我还将仔细查看我的程序包定义/用法,因为像所指出的那样循环依赖可能表示设计问题。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看