Трудно понять ООП Python - PullRequest
       1

Трудно понять ООП Python

3 голосов
/ 15 марта 2019

Я довольно зеленый для ООП, и я просто играл с ним на Python и наткнулся на то, что я не могу объяснить, надеюсь, что вы, ребята, сможете помочь.

Я играл с кодом ниже:

class Car():
    def __init__(self, brand, model, speed):
        self.brand = brand
        self.model = model
        self.speed = speed

    def increase_speed(self):
        return self.speed + 1


    def decrease_speed(self, decrease_by):
        return self.speed - decrease_by

car1 = Car("tesla","x",30)
print(car1.brand)
print(car1.speed)
print(car1.increase_speed())
print(car1.speed)
print(car1.decrease_speed(10))

Мой вопрос: я ожидаю, что после увеличения скорости скорость car1 будет равна 31, но вместо этого будет напечатано 30. Почему так и как должен быть написан код для скорости, равной 31?

Ответы [ 3 ]

3 голосов
/ 15 марта 2019
def increase_speed(self):
    self.speed += 1
    return self.speed

Ранее вы не увеличивали свою скорость, а просто возвращали значение, равное скорости плюс 1. Аналогичным образом измените свою функцию limit_speed.

1 голос
/ 15 марта 2019

Вместо того, чтобы возвращать значения, установите их для атрибутов:

class Car():
    def __init__(self, brand, model, speed):
        self.brand = brand
        self.model = model
        self.speed = speed

    def increase_speed(self):
        self.speed = self.speed + 1


    def decrease_speed(self, decrease_by):
        self.speed = self.speed - decrease_by

Я намеренно больше не возвращаю измененную скорость, поскольку это хороший стиль (по крайней мере, с методами, в основном устанавливающими атрибуты) в либо вернуть что-то или изменить состояние:

car1 = Car("tesla","x",30)
print(car1.brand)
print(car1.speed)
car1.increase_speed()
print(car1.speed)
car1.decrease_speed(10)
print(car1.speed)
1 голос
/ 15 марта 2019

Метод increment_speed просто возвращает self.speed + 1, если вы хотите обновить скорость, необходимую для self.speed = self.speed + 1, в метод увеличения скорости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...