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