Python 属性错误 : property cannot overwrite inherited attribute?

标签 python properties

我仍然不完全理解何时以及如何使用属性。这里我有一个继承 Car 的类 SpecialCar。变量 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 属性,将其设置为类的一部分并且替换为子类中的 property

关于Python 属性错误 : property cannot overwrite inherited attribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28282191/

相关文章:

python - 在线程中显示对话框

java - 在哪里放置属性文件?

c# - 请解释 C# 属性是如何工作的?

python - Anaconda 找不到模块 cv2

python - Kmeans 不知道簇的数量?

python - 这两个python语句是一样的吗?

c# - 访问自己类(class)的成员 : use (auto)properties or not?

java - JSF 每 2 秒从系统动态加载属性文件

c# - 是否可以从基础对象的列表中访问子对象属性?

python - (Python)根据属性将字典一分为二