Декоратор внутри класса - это возможно!

1635 1

Про декораторы знают все и как их делать написано много уже где.
Но вот про декораторы в рамках класса с доступом к параметрам класса надо еще поискать.
Декоратор внутри класса может показаться странной штукой, но иногда может пригодиться, чтобы не повторяться в методах.

class A():    bef = 'before'     aft = 'after'

    def _d(f):         def w(*args, **kwargs):             self = args[0]             print(self.bef)             f(*args, **kwargs)             print(self.aft)         return w   
    @_d     def f(self, a, b):         print(a, b)

c = A() c.f('function', 'body')

На выходе получим:

before
function body
after

Теперь можем оборачивать методы нужной нам функциональностью внутри класса с помощью декоратора.

Комментарии

8 февраля 2024 г. 20:15 owlman
Только вот такой трюк не работает с наследованием (((

Контактные данные

 Россия, г. Москва