Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: decorator, class decorator, callable, python, dunder methods

Может ли класс быть декоратором?

Проверяет понимание декораторов в Python и возможности использования классов в качестве декораторов.

Короткий ответ

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

Длинный ответ

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

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

Как класс становится декоратором?

Чтобы класс мог выступать в роли декоратора, его экземпляр должен быть вызываемым. Для этого в классе определяется метод __call__. Когда вы используете класс как декоратор, Python вызывает конструктор __init__ с декорируемой функцией в качестве аргумента, а затем при каждом вызове декорированной функции вызывается метод __call__.

Пример кода

class MyDecorator:
    def __init__(self, func):
        self.func = func
        self.count = 0

    def __call__(self, *args, **kwargs):
        self.count += 1
        print(f"Вызов {self.count} функции {self.func.__name__}")
        return self.func(*args, **kwargs)

@MyDecorator
def say_hello(name):
    print(f"Привет, {name}!")

say_hello("Анна")
say_hello("Иван")

В этом примере класс MyDecorator используется как декоратор. Он подсчитывает количество вызовов декорированной функции и выводит сообщение перед каждым вызовом.

Где это применяется?

Классы-декораторы полезны, когда нужно хранить состояние между вызовами функции (например, счетчики, кэширование) или когда требуется более сложная логика, чем в простой функции-декораторе. Они часто используются в фреймворках для логирования, профилирования или управления доступом.

Вывод

Использование класса в качестве декоратора — мощный инструмент Python, который позволяет создавать декораторы с сохранением состояния и дополнительными методами. Это особенно удобно, когда декоратор должен быть настраиваемым или иметь внутренние данные.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • Python

    Python

Ключевые слова

#decorator

#class decorator

#callable

#python

#dunder methods

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.