gpt4 book ai didi

python - 在父类中实现继承方法

转载 作者:行者123 更新时间:2023-12-03 21:11:35 25 4
gpt4 key购买 nike

我正在尝试理解 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是继承的汽车,没有理由通过CarCarWithBrakes.__init__ 中保留的实例.

关于python - 在父类中实现继承方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63399314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com