python - 提供的解决 python 循环依赖的解决方案不起作用

标签 python python-import circular-dependency

我正在尝试处理对 python 的循环依赖(是的,这是需要的,因为我需要在不同的文件和模块上分离我的模型)。

我尝试了几种方法来解决这个问题(其中大多数已经由相关问题建议),但没有一个解决问题。 注意:当删除循环依赖时,代码可以工作。

  1. 推迟导入

    /module_a/class_a.py

    from module_b.class_b import B
    
    class A:
        b = B()
    

    /module_b/class_b.py

    class B:
        from module_a.class_a import A
        a = A()
    
  2. 推迟两项导入

    /module_a/class_a.py

    class A:
        from module_b.class_b import B
        b = B()
    

    /module_b/class_b.py

    class B:
        from module_a.class_a import A
        a = A()
    
  3. 不使用 from .. 导入符号

    /module_a/class_a.py

    import module_b.class_b as mb
    
    class A:
        b = mb.B()
    

    /module_b/class_b.py

    import module_a.class_a as ma
    class B:
        a = ma.A()
    
  4. 不使用带有延迟导入的 from .. import 表示法

    /module_a/class_a.py

    class A:
        import module_b.class_b as mb
        b = mb.B()
    

    /module_b/class_b.py

    class B:
        import module_a.class_a as ma
        a = ma.A()
    

结果是所有解决方案都不起作用。我不知道这是否与调用是在类定义上这一事实有关,但它需要这样,因为我正在使用 ORM。

最佳答案

你想要做的事情在 Python 中根本无法以这种方式完成。由于类定义相互依赖于另一个类的存在,因此没有另一个类就无法成功定义任何一个类。即使在同一个文件中,这也会失败:

class A:
    b = B()
class B:
    a = A()

 NameError: name 'B' is not defined

无论如何都会考虑循环依赖result of a bad design并且总是可以通过使用不同的类设计来避免。如果这给您带来了麻烦,请考虑提出一个关于如何重构的更具体的问题。

关于python - 提供的解决 python 循环依赖的解决方案不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56094125/

相关文章:

python - Django在管理员中过滤多对多字段?

python - 取消裸奔累积计数

python - 如何避免解释器检查函数默认参数?

python - python中的fortran子例程导入失败

c++ - Qt类及其成员之间的循环依赖

python - 为什么在没有换行符的情况下读取文件会更快?

Python:强制每个导入重新加载

C++循环依赖按值返回?

python - Python中的循环导入依赖

python - 如何获取二进制掩码的位置真实位