#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.