На случайный случай это не домашнее задание:
class Bicycle(object):
def __init__(self, cadence=0, speed=0, gear=1, gearLabels=('A','B','C','D','E')):
super(Bicycle,self).__init__()
self.cadence = cadence
self.speed = speed
self.gearLabels = gearLabels
self._gear = None
self.gear = gear
def speedUp(self, increment):
self.speed += increment
def applyBrakes(self, decrement):
self.speed -= decrement
@property
def gear(self):
return self.gearLabels[self._gear-1]
@gear.setter
def gear(self, gear):
try:
self._gear = self.gearLabels.index(gear) + 1
except ValueError:
if 0 < gear <= len(self.gearLabels):
self._gear = gear
else:
raise ValueError("don't have gear {0}".format(gear))
def incGear(self):
self.gear = self._gear+1
def decGear(self):
self.gear = self._gear-1
def __str__(self):
return "cadence: {0}, speed: {1}, gear: {2}".format(self.cadence, self.speed, self.gear)
def main():
bike1 = Bicycle()
bike1.cadence = 50
bike1.speedUp(10)
bike1.gear = 2
print(bike1)
bike2 = Bicycle()
bike2.cadence = 50
bike2.speedUp(10)
bike2.gear = 2
bike2.cadence = 40
bike2.speedUp(10)
bike2.incGear()
print(bike2)
if __name__ == "__main__":
main()
Примечание:
Я дал конструктору значения по умолчанию, так что если вы хотите создать велосипед (gear = 3), вы можете.
Доступ к каденции и скорости осуществляется напрямую.
Чтобы показать, как использовать методы получения и установки свойств, я сделал механизм доступным в виде короткого набора меток и частного свойства _gear, в котором хранится текущий индекс.