Back to questions
Junior — Middle
73
Для чего применяется паттерн декоратора, если всё можно реализовать через обычную функцию вне класса?
Answer from AI
sobes.tech AI
Паттерн декоратора в объектно-ориентированном программировании позволяет динамически расширять функциональность объектов без изменения их исходного кода. Хотя в Python можно реализовать похожее поведение через обычные функции, использование декораторов в классах даёт несколько преимуществ:
- Читаемость и выразительность: декораторы явно показывают, что функция или метод оборачивается дополнительным поведением.
- Повторное использование: можно применять один и тот же декоратор к разным методам или классам.
- Композиция поведения: легко комбинировать несколько декораторов, создавая цепочки обработки.
- Инкапсуляция логики: декоратор может хранить состояние или параметры, что сложнее сделать в простой функции.
Пример простого декоратора в Python:
def timer(func):
import time
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"Время выполнения {func.__name__}: {end - start} секунд")
return result
return wrapper
@timer
def compute():
# какая-то тяжёлая операция
pass
Таким образом, паттерн декоратора — это структурный способ расширения поведения объектов, который лучше вписывается в ООП и облегчает поддержку кода.