Декораторы Python: типы, примеры и преимущества

Декораторы Python: типы, примеры, вывод. Функциональные, классовые, методические декораторы и их преимущества.

Декораторы Python и их типы с примерами и выводом

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

Типы декораторов

Существует три основных типа декораторов в Python:

  1. Функциональные декораторы: Определяются как функции, которые принимают целевую функцию в качестве аргумента и возвращают новую функцию. Новая функция имеет такое же имя и сигнатуру, как и целевая функция, к которой она применяется.

  2. Классовые декораторы: Определяются как классы с методом __call__, который принимает целевую функцию в качестве аргумента и возвращает новую функцию. Новая функция имеет такое же имя и сигнатуру, как и целевая функция, к которой она применяется.

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

Пример функционального декоратора

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

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"Elapsed time: {end - start}")
        return result
    return wrapper

@timer
def my_function(x, y):
    time.sleep(1)
    return x + y

my_function(10, 20)

Вывод:

Elapsed time: 1.0000419616699219

Пример классного декоратора

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

import time

class Timer:
    def __call__(self, func):
        def wrapper(*args, **kwargs):
            start = time.time()
            result = func(*args, **kwargs)
            end = time.time()
            print(f"Elapsed time: {end - start}")
            return result
        return wrapper

@Timer()
def my_function(x, y):
    time.sleep(1)
    return x + y

my_function(10, 20)

Вывод:

Elapsed time: 1.0000529289245605

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

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

import time

class MyClass:
    def timer(self, func):
        def wrapper(*args, **kwargs):
            start = time.time()
            result = func(*args, **kwargs)
            end = time.time()
            print(f"Elapsed time: {end - start}")
            return result
        return wrapper

    @timer
    def my_method(self, x, y):
        time.sleep(1)
        return x + y

obj = MyClass()
obj.my_method(10, 20)

Вывод:

Elapsed time: 1.0000440120697021

Преимущества декораторов

Использование декораторов имеет множество преимуществ:

  • Повторное использование кода: Декораторы позволяют повторно использовать общую функциональность, такую как измерение производительности, кэширование или логирование, без необходимости копировать и вставлять код.
  • Модульность: Декораторы помогают разделить функциональность кода, что облегчает его обслуживание и тестирование.
  • Расширяемость: Декораторы позволяют расширить существующие классы и функции без необходимости модифицировать их исходный код.
  • Ясность кода: Декораторы могут сделать код более читаемым и понятным, выделяя общую функциональность в отдельные модули.

Вывод

Декораторы являются мощным инструментом в Python, который позволяет изменять поведение функций и классов. Существует три основных типа декораторов: функциональные, классовые и на основе методов. Декораторы предоставляют множество преимуществ, включая повторное использование кода, модульность, расширяемость и ясность кода.

To leave a comment you need to Login / Create account