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

标签 python

我正在尝试理解 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/

相关文章:

python - 如何使用 Matplotlib 处理渐近线/不连续性

python - 对数据框的交替列求和

python - 为 Networkx 图添加标题?

python - 根据 Pandas 数据框中的多个变量计算概率

python - 如何使用 matplotlib 从字典中绘制水平条形图?

python - 字符串的反向切片 [x :y:-1] prints blank

python - 人机可读——文件中的结构化数据存储

python - 为什么这个垃圾邮件代码可以无限次运行?

python - 如何使用 'add_value_provider_argument'初始化运行时参数?

python - 使用 Pandas 聚合所有数据框行对组合