class Vehicle:
def __init__(self, make, model):
self.year = 2000
self.make = make
self.model = model
@property
def year(self):
return self._year
@year.setter
def year(self, value):
if (value > 2000 and value < 2018):
self._year = value
@property
def make(self):
return self._make
@make.setter
def make(self, value):
self._make = value
@property
def model(self):
return self._model
@model.setter
def model(self, value):
self._model = value
# ***DO NOT MODIFY OR REMOVE ANYTHING BELOW THIS POINT!***
# the main part of the program
v1 = Vehicle("Dodge", "Ram")
v2 = Vehicle("Honda", "Odyssey")
print "v1={} {}".format(v1.make, v1.model)
print "v2={} {}".format(v2.make, v2.model)
print
v1.year = 2016
v2.year = 2016
print "v1={} {} {}".format(v1.year, v1.make, v1.model)
print "v2={} {} {}".format(v2.year, v2.make, v2.model)
print
v1.year = 1999
v2.model = "Civic"
v2.year = 2007
print "v1={} {} {}".format(v1.year, v1.make, v1.model)
print "v2={} {} {}".format(v2.year, v2.make, v2.model)
我需要帮助实现year变量的mutator和accessor。说明如下:
(1)构造函数必须使用两个参数,make和model,并正确使用mutator来设置这些值; (2)默认情况下,新实例化的车辆为2000年; (3)每个实例的访问器和变换器(使用类中讨论的装饰器方法) 必须包括变量(即年份,品牌和型号); (4)车辆的年份必须介于2000年至2018年之间(即实施范围 检查以便忽略任何其他提供的值)
正确的输出应该是:
v1 =道奇拉姆 v2 = Honda Odyssey
v1 = 2016 Dodge Ram v2 = 2016本田奥德赛
v1 = 2016 Dodge Ram v2 = 2007 Honda Civic
我的输出是:
v1 =道奇拉姆 v2 = Honda Odyssey
v1 = 2016 Dodge Ram v2 = 2016本田奥德赛
v1 = 1999道奇拉姆 v2 = 2007 Honda Civic
年份的访问者和变更者未正确检查值是否可接受的范围。我对编程还很陌生,所以如果这是一个简单的问题/简单修复,我道歉!
答案 0 :(得分:0)
您的mutators和访问器无法正常工作,因为您使用的是经典的类。
要使属性起作用,您应该使用从“对象”继承的新类型。
您可以在此处找到有关这两种课程风格之间差异的更多信息:What is the difference between old style and new style classes in Python?
要修复您的代码,请更改:
class Vehicle:
进入这个:
class Vehicle(object):