我有两个python类,让我们称它们为A和B.A负责处理通过网络接收和发送某种格式的消息。 B负责解释消息。
现在a和b分别是A类和B类的实例。请考虑以下情形:
为了达到这个目的,我构建了两个相互引用的类。这很好但我想问你这个设计缺陷是否应该避免?
有关说明,请参阅以下最小代码示例:
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)
答案 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
,则会立即收到异常。