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

时间:2019-05-11 20:40:53

标签: 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. 未从..导入符号中使用

    /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. 不使用来自..导入符号的延迟导入

    /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,因此必须采用这种方式。

1 个答案:

答案 0 :(得分:2)

您要尝试执行的操作根本无法在Python中以这种方式完成。由于类定义相互依赖于另一个其他类的存在,因此没有另一个就不能成功定义两个类。即使在同一文件中,也会失败:

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

 NameError: name 'B' is not defined

循环依赖始终被视为result of a bad design,并且始终可以通过使用其他类设计来避免。考虑问一个更具体的问题,如果这给您带来麻烦,该如何重构。