Junior — Middle
70
Можете объяснить, что означает паттерн 'декоратор' в программировании и как его используют?
Компании, где спрашивали
Soft Media Group
Ответ от нейросети
sobes.tech AI
Паттерн "декоратор" в программировании позволяет динамически добавлять объектам новые обязанности, оборачивая их в другие объекты-декораторы, не изменяя исходный класс.
В Python декораторы часто реализуются как функции или классы, которые принимают объект (или функцию) и возвращают обёртку с дополнительным поведением.
Пример использования декоратора для функции:
def decorator(func):
def wrapper(*args, **kwargs):
print("До вызова функции")
result = func(*args, **kwargs)
print("После вызова функции")
return result
return wrapper
@decorator
def say_hello():
print("Привет!")
say_hello()
Здесь say_hello оборачивается в wrapper, который добавляет вывод сообщений до и после вызова.
В объектно-ориентированном подходе декоратор — это класс, который содержит ссылку на объект того же интерфейса и расширяет его поведение, например:
class Component:
def operation(self):
pass
class ConcreteComponent(Component):
def operation(self):
print("Основная операция")
class Decorator(Component):
def __init__(self, component):
self._component = component
def operation(self):
print("Дополнительное поведение до")
self._component.operation()
print("Дополнительное поведение после")
component = ConcreteComponent()
decorated = Decorator(component)
decorated.operation()
Таким образом, декоратор позволяет расширять функциональность без изменения исходного кода.