Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
22 Окт 2024
2 мин
401

Как создать и использовать декораторы в Python

Узнайте, как создавать и использовать декораторы в Python для изменения поведения функций и классов без изменения исходного кода!

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

Создание декоратора

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

def simple_decorator(func):
    def wrapper():
        print("Действие перед выполнением функции")
        func()
        print("Действие после выполнения функции")
    return wrapper

def my_function():
    print("Это моя функция")

decorated_function = simple_decorator(my_function)
decorated_function()

Вывод:

Действие перед выполнением функции
Это моя функция
Действие после выполнения функции

Использование декоратора с синтаксисом @

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

@simple_decorator
def my_function():
    print("Это моя функция")

my_function()

Вывод будет таким же, как и в предыдущем примере.

Декораторы с аргументами функции

Чтобы создать декоратор, который может работать с функциями, принимающими аргументы, используйте *args и **kwargs в определении обертывающей функции:

def decorator_with_arguments(func):
    def wrapper(*args, **kwargs):
        print("Действие перед выполнением функции")
        result = func(*args, **kwargs)
        print("Действие после выполнения функции")
        return result
    return wrapper

@decorator_with_arguments
def my_function_with_args(a, b):
    print(f"Сумма {a} и {b} равна {a + b}")

my_function_with_args(1, 2)

Вывод:

Действие перед выполнением функции
Сумма 1 и 2 равна 3
Действие после выполнения функции

Использование нескольких декораторов

Вы можете применить несколько декораторов к одной функции, просто написав их один под другим:

def another_decorator(func):
    def wrapper(*args, **kwargs):
        print("Другой декоратор")
        return func(*args, **kwargs)
    return wrapper

@simple_decorator
@another_decorator
def my_function():
    print("Это моя функция")

my_function()

Вывод:

Действие перед выполнением функции
Другой декоратор
Это моя функция
Действие после выполнения функции

Обратите внимание, что порядок декораторов имеет значение, и они применяются снизу вверх.

Заключение

Теперь вы знаете основы создания и использования декораторов в Python. Они могут быть очень полезными для оптимизации кода и добавления дополнительной функциональности без изменения существующих функций или классов. Не забывайте экспериментировать и создавать свои собственные декораторы! 😊

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий