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

Solutions provided to solve circular dependency on python doesn't work

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

我尝试了几种方法来解决这个问题(其中大部分已经由相关问题提出)但是 none 其中解决了问题。 注意:当删除循环依赖时,代码有效。

  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 .. 导入符号[=​​19=]

    /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 notation with defer 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()
    

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

您尝试做的事情在 Python 中根本做不到。由于 class 定义相互依赖于 class 另一个 class 的存在,因此没有另一个 class 就无法成功定义。即使在同一个文件中,这也会失败:

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

 NameError: name 'B' is not defined

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