


Понимание декораторов в Python
Декораторы — это шаблон проектирования, который позволяет изменять или расширять поведение объекта без изменения исходной реализации объекта. Другими словами, декораторы позволяют добавлять новые функции к существующему объекту без изменения его основного кода. Декоратор обычно представляет собой функцию, которая принимает объект в качестве аргумента и возвращает новый объект, который «обертывает» исходный объект. Новый объект имеет те же методы и атрибуты, что и исходный объект, но у него также есть некоторые дополнительные функции или поведение, предоставляемые декоратором. ()`, что заставляет машину двигаться. Вы можете создать декоратор под названием SpeedLimitDecorator, который модифицирует методdrive(), чтобы ограничить скорость автомобиля. `SpeedLimitDecorator` будет принимать исходный объект `Car` в качестве аргумента и возвращать новый объект `Car`, который имеет те же методы и атрибуты, что и исходный объект `Car`, но с добавленной функциональностью ограничения скорости.
Вот пример того, как вы можете использовать декоратор в Python:
```
class Car:
def Drive(self):
print("Машина едет")
class SpeedLimitDecorator:
def __init__(self, car):
self. car = car
def Drive(self):
self.car.drive()
print("Теперь скорость автомобиля ограничена 50 милями в час")
car = Car()
speed_limited_car = SpeedLimitDecorator(car)
speed_limited_car.drive() # print «Машина едет» и «Теперь скорость автомобиля ограничена 50 милями в час»
```
В этом примере класс `SpeedLimitDecorator` принимает объект `Car` в качестве аргумента в своем конструкторе, а затем изменяет `drive( )` метод исходного объекта `Car` для ограничения его скорости. Класс SpeedLimitDecorator также имеет свой собственный методdrive(), который вызывает исходный методdrive() обернутого объекта, но с дополнительным ограничением в 50 миль в час.
Decorators — мощный инструмент для изменения или расширения существующих объектов. без изменения их первоначальной реализации. Их можно использовать для добавления новых функций, изменения поведения или даже замены частей реализации объекта, не затрагивая остальную часть кода.



