我仍然不完全了解何时以及如何使用属性。在这里,我有一个继承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)
答案 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