Mutator和Accessor在一定范围内无法正常工作

时间:2018-03-27 18:03:48

标签: python python-2.7

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

年份的访问者和变更者未正确检查值是否可接受的范围。我对编程还很陌生,所以如果这是一个简单的问题/简单修复,我道歉!

1 个答案:

答案 0 :(得分:0)

您的mutators和访问器无法正常工作,因为您使用的是经典的类。

要使属性起作用,您应该使用从“对象”继承的新类型。

您可以在此处找到有关这两种课程风格之间差异的更多信息:What is the difference between old style and new style classes in Python?

要修复您的代码,请更改:

class Vehicle:

进入这个:

class Vehicle(object):