Python AttributeError: property cannot overwrite inherited attribute?

Python AttributeError: property cannot overwrite inherited attribute?

我仍然不完全理解何时以及如何使用属性。这里我有一个 class 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)

您声明的 属性 没有 setter,因此 Car.__init__ 中的 self.tire = 0 失败。

你可以给你的新 property 一个 setter:

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 成为 class 属性,设置为 [=25] 的一部分=] 并替换为 property in subclasses.