Казалось бы всё просто: декораторы – это просто статические фукции.
Но ведь это функции, а в функции вполне можно передавать различные параметры… Причём не обязательно это должны быть константные значение либо имена типов (как пользуются декораторами почти везде). В декоратор можно передать значения считаные из файла настроек; главное, чтобы значение было определено до того как объявляется применение самого декоратора к функции. Для примера декоратор @measures получает на вход 3 разных значения, а значит функции linerFib, linerFib1 и stubFib будут “обрамляться” разными строками.
Но если бы всё только этим и ограничивалось… Самое интресное наступает, когда понимаешь, что декораторы могут возвращать и лямбда-функции. А ещё интересней становится, когда доходит что через лямбда-функцию можно вернуть не результат самой декорируемой функции, а экземпляр объекта, в котором есть метод __call__() , который и будет возвращать результат декорируемой функции. Да - это кажется перебором с вложеностью матрёшек, но вот с логической точки зрения провести разделение подготовки к вызову декорируемой функции и пост-обратотку её результата кажется довольно аппетитным… Т.е. можно провернуть следующее:
1: class Drawer(object):Да, в большинстве случаев это будет довольно избыточно, но когда хочешь выводить график декорируемой функции в pygame, при этом не смешивая вывод результата на экран и расчёты и обработку результатов функции, то такие матрёшки становятся вполне удобными.
Комментариев нет:
Отправить комментарий