修复类方法循环

时间:2012-05-31 23:56:53

标签: python class loops methods

我遇到了类文件的问题,我似乎无法找到解决方法。我希望有人能指出我正确的方向。

这是我的代码:

class Car:
    def __init__(self, year_model, make, speed):
        self.__year_model = year_model
        self.__make = make
        self.__speed = 0

    def set_year_model(self, year_model):
        self.__year_model = year_model

    def set_make(self, make):
        self.__make = make

    def get_year_model(self):
        return self.__year_model

    def get_make(self):
        return self.__make

    def accelerate(self):
        self.__speed + 5
        return self.__speed

    def decelerate(self):
        self.__speed - 5
        return self.__speed

    def get_speed(self):
        return self.__speed 

基本上,我希望将speed属性设置为0,并且有3个方法(加速,减速和get_speed),它们对speed属性进行加减5并最终返回speed属性,以便打印出来。

我猜我的格式有问题,但我似乎无法找到能够修复课程的正确安排。

真正的程序假设循环加速方法5次,但是类方法应该处理顺序加法并返回最终速度。

import car

user_year = 1995
user_make = "toyota"
user_speed = 0

user_car = car.Car(user_year, user_make, user_speed)

for count in range(1,6):
user_car.accelerate()

print user_car.get_speed()

我知道这段代码非常弱,但是这一切都是临时的,可以帮助我解决问题。 所以希望它不会太混乱,我可以得到答案。

2 个答案:

答案 0 :(得分:5)

self._speed + 5计算当前速度加上5.但实际上并没有将计算值存储在任何地方。您想使用self._speed = self._speed + 5或更常用的表单self._speed += 5

答案 1 :(得分:0)

问题当然是缺少“+ =”和“ - =”部分,但我会更进一步,并建议如果你正在编写新的python代码,那么你就会熟悉新的风格课。在新的样式类中,您的代码可以按如下方式编写:

class Car(object):
    def __init__(self, year_model, make, speed):
        self.year_model = year_model
        self.make = make
        self.speed = 0

    def __set_year_model(self, year_model):
        self.__year_model = year_model

    def __set_make(self, make):
        self.__make = make

    def __set_speed(self, speed):
        self.__speed = speed

    def __get_year_model(self):
        return self.__year_model

    def __get_make(self):
        return self.__make

    def accelerate(self):
        self.speed += 5

    def decelerate(self):
        self.speed -= 5

    def __get_speed(self):
        return self.__speed 

    speed = property(fget=__get_speed,fset=__set_speed,fdoc="Set or Retrieve the current speed of this instance of the Car object")
    make = property(fget=__get_make,fset=__set_make,fdoc="Set or Retrieve the make of this instance of the Car object")
    year_model = property(fget=__get_year_model,fset=__set_year_model,fdoc="Set or Retrieve the Year and Model of this instance of the Car object")

此外,代码在主文件中更改:

import car

user_year = 1995
user_make = "toyota"
user_speed = 0

user_car = car.Car(user_year, user_make, user_speed)

for count in range(1,6):
    user_car.accelerate()

print user_car.speed