Python AttributeError:属性不能覆盖继承属性?

时间:2015-02-02 16:26:32

标签: python properties

我仍然不完全了解何时以及如何使用属性。在这里,我有一个继承SpecialCar的课程Car。除名称外,变量summer_tire应基本上等同于tire。所以每当我要求这两个中的任何一个时,我都希望得到summer_tire

使用@property会导致错误。删除@property行将打印0,但我想获得2

class Car():
    def __init__(self):
        self.tire = 0

class SpecialCar(Car):
    def __init__(self):
        Car.__init__(self)
        self.summer_tire = 2
        self.winter_tire = 5

    @property
    def tire(self):
        return self.summer_tire

i = SpecialCar()
print(i.tire)

1 个答案:

答案 0 :(得分:4)

您声明了一个没有设置器的属性,因此self.tire = 0中的Car.__init__失败。

你可以给你的新property一个二传手:

class SpecialCar(Car):
    def __init__(self):
        Car.__init__(self)
        self.summer_tire = 2
        self.winter_tire = 5

    @property
    def tire(self):
        return self.summer_tire

    @tire.setter
    def tire(self, new_tire):
        self.summer_tire = new_tire

或者您可以完全避免调用Car.__init__,或者使Car.tire成为属性,将其设置为类的一部分并替换为子类中的property