Что такое декоратор в Python · Python Backend — JobPilot

Что такое декоратор в Python

Python Backend · 34%
Вопрос 2465 / #
Пример ответа

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

Ключевые идеи:
  • Декоратор оборачивает функцию, добавляя функциональность до или после её вызова, что следует принципу DRY.
  • В Python декораторы реализуются через замыкания или классы с методом __call__, и их можно применять с синтаксисом @decorator_name.
  • Я применял декораторы для асинхронных задач, валидации входных данных и управления сессиями базы данных в веб-приложениях.
Пример: Например, я создал декоратор @timed для измерения времени выполнения функций в микросервисах, что помогло выявить узкие места в производительности.
Пример простого декоратора для логирования вызовов функций
python
import functools
import logging

logging.basicConfig(level=logging.INFO)

def log_execution(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        logging.info(f"Вызов функции {func.__name__} с аргументами {args}, {kwargs}")
        result = func(*args, **kwargs)
        logging.info(f"Функция {func.__name__} завершилась с результатом {result}")
        return result
    return wrapper

@log_execution
def add(a, b):
    return a + b

# Использование
result = add(3, 5)  # В логах будет запись о вызове и завершении
Вопросы для интервьюера:
  • Как вы реализуете декоратор с параметрами?Использую вложенные функции: внешняя принимает параметры, внутренняя — декорируемую функцию, как в @retry(max_attempts=3).
  • Какие есть ограничения у декораторов?Они могут усложнить отладку из-за скрытия исходной функции, но functools.wraps помогает сохранить метаданные.
Практический совет (на неделю):
  1. Начните с создания декоратора для кэширования результатов тяжёлых вычислений, используя словарь для хранения.
  2. Изучите встроенные декораторы, такие как @staticmethod или @property, чтобы понять их применение в классах.
Python Backend
Общий
34%
Навигация
Расскажи про свой опыт
Следующий: Какие у тебя зарплатные ожидания
Предыдущий: Расскажи про свой опыт

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.