Sobes.tech
Back to questions
Middle — Middle+
52

Каким образом можно использовать шаблон Декоратор в объектно-ориентированном программировании без непосредственного изменения функции или метода?

Answer from AI

sobes.tech AI

Шаблон Декоратор позволяет динамически расширять функциональность объекта без изменения его исходного кода. В Python это часто реализуется с помощью функций-декораторов, которые принимают функцию или метод и возвращают новую функцию с дополнительным поведением.

Пример использования декоратора для логирования вызовов функции:

def log_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Вызов функции {func.__name__} с аргументами {args} и {kwargs}")
        result = func(*args, **kwargs)
        print(f"Функция {func.__name__} вернула {result}")
        return result
    return wrapper

@log_decorator
def multiply(a, b):
    return a * b

multiply(3, 4)

Здесь исходная функция multiply не меняется, но благодаря декоратору её поведение расширяется. Такой подход позволяет добавлять функциональность (например, кэширование, проверку прав, логирование) без изменения исходного кода функций или методов.