两个python类实例相互引用

时间:2016-11-10 16:18:19

标签: python class

我有两个python类,让我们称它们为A和B.A负责处理通过网络接收和发送某种格式的消息。 B负责解释消息。

现在a和b分别是A类和B类的实例。请考虑以下情形:

  • a接收消息并调用b的某种方法进行消息解释
  • b处理消息并希望使用a的某种方法来发送响应

为了达到这个目的,我构建了两个相互引用的类。这很好但我想问你这个设计缺陷是否应该避免?

有关说明,请参阅以下最小代码示例:

class A:

    def set_b(self, b):
        self.b = b


class B:

    def set_a(self, a):
        self.a = a


if __name__ == '__main__':

    a = A()
    b = B()

    b.set_a(a)
    a.set_b(b)

1 个答案:

答案 0 :(得分:2)

CPython在一些版本之前添加了循环垃圾收集,因为循环依赖性很常见,成为一个问题。尽管如此,您可能无法通过调用select * from schema_migrations; 方法的a方法通过b而不是依赖已经拥有引用的self来创建周期到b

如果你坚持循环,我会尽可能自动地进行连接。例如:

a

如果您忘记将class B: def __init__(self, a): self.a = a a.set_b(self) a = A() b = B(a) # Both instances are fully initialized and ready to go. 传递给a,则会立即收到异常。