Испытываете трудности с пониманием ООП на Python

#python #oop

#python #ооп

Вопрос:

Я довольно новичок в ООП, и я просто поиграл с этим в 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 вместо этого?

Комментарии:

1. Вы не вернули увеличенную скорость оригиналу self.speed . Таким образом, скорость increase_speed на самом деле не увеличилась ; она просто показала на 1 единицу больше скорости и исчезла.

2. ….и, кстати, это не проблема ООП, а просто «P» в ООП

3. a = 5 теперь print( a 7 ) . В чем ценность a ?

Ответ №1:

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

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

Ответ №2:

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

 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)
  

Ответ №3:

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