在我看来,你可以稍微改进一下设计。由于每辆车都“知道”在哪里进行维修,因此您可能应该在每辆车中执行类似的操作
def __init__(self, ..., service):
super().__init__(self, ...)
...
...
service.register_vehicle(self)
这是从“车开到车库去登记”而不是“车库找新车”的角度出发的。
当您初始化车辆时,将其服务类别传递给它,如下所示
new_car = Car(..., my_car_service)
where
my_car_service = Cars()
之前的某个地方。这是因为我们假设每辆新车都需要注册,并且我们不会为每辆新车提供新服务。另一种方法是让类从一开始就包含(组合)其服务对象:
class Car:
service = Cars()
def __init__(...)
...
Car.service.register_vehicle(self)
因此该类始终包含服务对象,并且所有初始化的对象通过类变量共享同一个对象。我其实更喜欢这个。
第一次初始化:
关于车辆的初始初始化,在使用时locals
可能是一个很好的解决方案,拥有像您拥有的东西可能会更安全一些。在 Python 中,我喜欢使用“Python switchdictionary”(TM)来完成类似的事情:
{'car': Car,
'bus': Bus,
...
'jet': Jet
}[body[vehicle_type]](body)