← Назад ко всем вопросам

Как объявляется декоратор

1️⃣ Как кратко ответить

Декоратор в Python объявляется как функция, которая принимает другую функцию в качестве аргумента и возвращает новую функцию. Он используется для изменения или расширения поведения функции без изменения её кода. Декоратор применяется с помощью символа @ перед объявлением функции, которую нужно декорировать.

2️⃣ Подробное объяснение темы

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

Что такое декоратор?

Декоратор — это функция, которая принимает другую функцию в качестве аргумента и возвращает новую функцию. Эта новая функция обычно оборачивает оригинальную функцию, добавляя к ней дополнительное поведение.

Зачем нужны декораторы?

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

  • Логирования вызовов тестов.
  • Измерения времени выполнения тестов.
  • Управления доступом к тестам.
  • Повторного использования кода, который должен выполняться до или после теста.

Как работает декоратор?

Декоратор объявляется как функция, которая принимает функцию и возвращает функцию. Рассмотрим простой пример:

def my_decorator(func):
    def wrapper():
        print("Что-то делаем до вызова функции")
        func()
        print("Что-то делаем после вызова функции")
    return wrapper
  • my_decorator — это декоратор. Он принимает функцию func в качестве аргумента.
  • wrapper — это внутренняя функция, которая оборачивает func. Она выполняет дополнительные действия до и после вызова func.
  • return wrapper — возвращает обёрнутую функцию.

Применение декоратора

Чтобы применить декоратор к функции, используется символ @:

@my_decorator
def say_hello():
    print("Hello!")
​
say_hello()
  • @my_decorator — применяет декоратор my_decorator к функции say_hello.
  • Вызов say_hello() теперь будет выводить:
    Что-то делаем до вызова функции
    Hello!
    Что-то делаем после вызова функции
    

Пример с параметрами

Декораторы также могут принимать параметры. Для этого нужно создать функцию, которая возвращает декоратор:

def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                func(*args, **kwargs)
        return wrapper
    return decorator_repeat
​
@repeat(num_times=3)
def greet(name):
    print(f"Hello, {name}!")
​
greet("Alice")
  • repeat — функция, принимающая параметр num_times.
  • decorator_repeat — декоратор, который повторяет вызов функции num_times раз.
  • wrapper — обёртка, которая вызывает func заданное количество раз.
  • @repeat(num_times=3) — применяет декоратор с параметром num_times=3 к функции greet.

Заключение

Декораторы — это удобный способ добавления функциональности к функциям и методам без изменения их исходного кода. Они широко используются в автоматизации тестирования для улучшения читаемости и повторного использования кода.

Тема: Python
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки