我正在尝试理解 Python 继承和以下类 CarWithBrakes
继承自类 Car
:
class Car :
def __init__(self , wheels):
self.wheels = wheels
self.jsonTransform = {}
self.jsonTransform['wheels'] = wheels
def toJson(self):
return self.jsonTransform
def get_wheels(self):
return self.wheels
class CarWithBrakes(Car):
def __init__(self , car, brakes):
self.car = car
self.brakes = brakes
def toJson(self):
self.jsonTransform = {}
self.jsonTransform['wheels'] = self.car.wheels
self.jsonTransform['brakes'] = self.brakes
return self.jsonTransform
c = Car("wheels")
print(c.toJson())
b = CarWithBrakes(c , "brakes")
print(b.toJson())
print(b.get_wheels())
运行此代码会产生:{'wheels': 'wheels'}
{'wheels': 'wheels', 'brakes': 'brakes'}
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-62-9b4b5598414b> in <module>
30 b = CarWithBrakes(c , "brakes")
31 print(b.toJson())
---> 32 print(b.get_wheels())
<ipython-input-62-9b4b5598414b> in get_wheels(self)
11
12 def get_wheels(self):
---> 13 return self.wheels
14
15 class CarWithBrakes(Car):
轮子属性不应该作为 CarWithBrakes
提供吗?继承自 Car
?
最佳答案
这里有两个问题。CarWithBrakes
确实覆盖了 __init__
Car
的方法.在被覆盖的方法中,wheels
属性未设置。通常,您通过 wheels
将希望与子类共享的工作(例如设置 super().__init__(...)
属性)委托(delegate)给子类初始化程序。 .
其次,您不必要地混合了继承和聚合。一个 CarWithBrakes
是继承的汽车,没有理由通过Car
在 CarWithBrakes.__init__
中保留的实例.
关于python - 在父类中实现继承方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63399314/