Sobes.tech
Junior — Middle
70

Можете объяснить, что означает паттерн 'декоратор' в программировании и как его используют?

Компании, где спрашивали
WildberriesWildberries
МТСМТС
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()

Таким образом, декоратор позволяет расширять функциональность без изменения исходного кода.