

Базовый класс Tire
class Tire:
def __init__(self, manufacturer, size, season):
self._manufacturer = manufacturer
self._size = size
self._season = season
def fitting(self):
print(f"Монтаж шины {self._manufacturer} {self._size} {self._season}.")
Дочерние классы BikeTire и CarTire
class BikeTire(Tire):
def __init__(self, manufacturer, size, season):
super().__init__(manufacturer, size, season)
class CarTire(Tire):
def __init__(self, manufacturer, size, season):
super().__init__(manufacturer, size, season)
Декораторы для доступа к свойству давления
def validate_pressure(func):
def wrapper(self, value):
if isinstance(self, BikeTire):
if value < 2.3 or value > 3.4:
raise ValueError("Давление в шине велосипеда должно быть между 2.3 и 3.4 атмосферы.")
elif isinstance(self, CarTire):
if value < 1.5 or value > 3.5:
raise ValueError("Давление в шине автомобиля должно быть между 1.5 и 3.5 атмосферы.")
return func(self, value)
return wrapper
@validate_pressure
def inflate_tire(self, value):
self._pressure = value
print(f"Давление в шине {self._manufacturer} {self._size} составляет {self._pressure} атмосферы.")
Примеры работы
# Создание экземпляра велосипедной шины
bike_tire = BikeTire("Continental", "26x1.95", "летняя")
# Монтаж шины
bike_tire.fitting()
# Подкачка шины
bike_tire.inflate_tire(3.2)
# Создание экземпляра автомобильной шины
car_tire = CarTire("Michelin", "225/55 R17", "зимняя")
# Монтаж шины
car_tire.fitting()
# Подкачка шины
car_tire.inflate_tire(2.7)
Лента в твиттере