Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
07 Окт 2024
2 мин
137

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

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

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

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

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

Простой пример декоратора

Давайте создадим простой декоратор, который будет выводить информацию о вызове функции:

def simple_decorator(func):
    def wrapper():
        print(f"Function {func.__name__} is called")
        return func()
    return wrapper

@simple_decorator
def my_function():
    print("Hello, world!")

my_function()

Вывод:

Function my_function is called
Hello, world!

Здесь мы создали декоратор simple_decorator, который принимает функцию func и возвращает новую функцию wrapper. Внутри wrapper мы выводим информацию о вызове функции и затем вызываем саму функцию func.

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

Чтобы создать декоратор, который может принимать аргументы, мы должны добавить еще одну обертку вокруг нашего декоратора:

def decorator_with_args(arg1, arg2):
    def actual_decorator(func):
        def wrapper():
            print(f"Function {func.__name__} is called with arguments {arg1} and {arg2}")
            return func(arg1, arg2)
        return wrapper
    return actual_decorator

@decorator_with_args("Hello", "world!")
def my_function_with_args(arg1, arg2):
    print(f"{arg1}, {arg2}")

my_function_with_args()

Вывод:

Function my_function_with_args is called with arguments Hello and world!
Hello, world!

Теперь наш декоратор принимает аргументы и мы можем использовать их внутри wrapper.

Использование functools.wraps

При использовании декораторов важно сохранить метаданные исходной функции, такие как имя, документация и т.д. Для этого в Python есть специальный декоратор functools.wraps, который копирует эти метаданные:

import functools

def simple_decorator(func):
    @functools.wraps(func)
    def wrapper():
        print(f"Function {func.__name__} is called")
        return func()
    return wrapper

@simple_decorator
def my_function():
    """This is a simple function"""
    print("Hello, world!")

print(my_function.__name__)
print(my_function.__doc__)

Вывод:

my_function
This is a simple function

Теперь наш декоратор корректно сохраняет метаданные исходной функции.

Заключение

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

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

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