我需要创建几个相互引用(通常是循环引用)的对象。通常,可能涉及多个对象,但这里有一个简单的案例,我只需要一对相互引用的汽车:
class Car:
def __init__(self, position, speed):
self.position = position
self.speed = speed
def set_reference(self, other_car):
self.other_car = other_car
# ...
def main():
# ...
car1 = Car(pos1, spd1)
car2 = Car(pos2, spd2)
car1.set_reference(car2)
car2.set_reference(car1)
没有引用另一辆车的汽车不是有效对象。所以理想情况下,我想set_reference
从__init__
方法内部执行;这将更安全(没有机会使用无效对象)和更清洁(所有初始化都将按__init__
预期执行)。
是否有任何巧妙的解决方案可以实现这一目标?我不介意一次创建两辆汽车,但每辆汽车都是一个独立的实体,因此它需要本身就是一个实例。
我也知道循环引用对 GC 来说很麻烦。我会处理的。
用例:
每辆车都充当另一辆车的备用车。汽车实例是“智能的”,也就是说,它们可以做很多工作。如果汽车实例不知道它的备份,这很烦人,因为它会阻止汽车完成操作,而无需每次都来自外部的引用。