Да. Декоратор на основе класса реализует __call__ так, что его экземпляр ведет себя как функция.
Пример
class CallCounter:
def __init__(self, func):
self.func = func
self.calls = 0
def __call__(self, *args, **kwargs):
self.calls += 1
return self.func(*args, **kwargs)
Разбор
Суммируя:
- Декоратор может быть реализован не только как функция, но и как класс.
- Класс удобен, когда вам нужно внутреннее состояние.
- Ключевой механизм —
__call__.
Итог
Сформулируйте определение, когда применять и типичные ловушки на проде.