Задать вопрос
vvpoloskin
@vvpoloskin
Инженер связи

Как реализовать декоратор класса в python?

Вопрос знатокам python.
Исходная задача - необходимо, чтобы один из методов класса оборачивался в декораторы. Это можно сделать через переопределение этого метода и оборачиванием его через method_decorator.

class MyView(View):
   @method_decorator(login_required):
   def dispatch(self, *args, **kwargs):
       return super(MyView, self).dispatch(*args, **kwargs)

Я не хочу переписывать каждый раз этот метод. Мне кажется более логичным такое решение
@viewdecorator(login_required)
class MyView(View):
    pass

Вот вопрос - как написать viewdecorator?

Сейчас я написал следующее:
def viewdecorator(decorator):
    def wrap(cls):
        dispatch = getattr(cls, 'dispatch', None)
        if dispatch:
            setattr(cls, 'dispatch', method_decorator(decorator))
        return cls
    return wrap

При этом почему-то не переносятся classmethod-ы и classonlymethod-ы. Конкретно в моем случае не идет as_view().
Как сделать так, чтоб это перенеслось?
  • Вопрос задан
  • 14110 просмотров
Подписаться 5 Комментировать
Подписчики вопроса 5 К ответам на вопрос (4)