Sobes.tech
Назад к вопросам
Middle
1

Расскажите про декораторы в Python: что это за паттерн и как реализовать декоратор с аргументами?

Компании, где спрашивали
Navio

Ответ от нейросети

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(name):
    print(f"Привет, {name}!")

say_hello("Мир")

Для создания декоратора с аргументами нужен дополнительный уровень вложенности:

def repeat(times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(times):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def greet(name):
    print(f"Привет, {name}!")

greet("Анна")

Здесь repeat — функция, принимающая аргумент times и возвращающая декоратор. Такой подход позволяет параметризовать поведение декоратора.