Comments 9
Грамматическая ошибка в заголовке.
Ну, собственно, в процессе разработки "сложной" библиотеки я к этому и пришел. Но, тем не менее, лучше знать, что такие приемы есть, чем городить костыли, когда возникнет такая необходимость. Я бы не отказался наткнуться на такую статью, пока копался по исходникам разных опенсорсов в попытках найти нормальное рабочее решение. Причем оказалось, что проще сделать его самому.
Сначала подумал: "ну что там особо нового еще может быть...?". В итоге с интересом дочитал до конца. Автору спасибо за статью.
Я сам столкнулся с тем, что какого-либо "продвинутого" материала по разработке почти нет. Если ты джун - вот тебе "hello world", но если решил сделать что-то дальше, то "ты уже большой мальчик, копай сам".
Поэтому и решил сделать что-то чуть более глубокое, чем обычные забивки в блогах. Тем более опыт и количество набитых шишек позволяет рассказать что-то интересное.
Если такой формат заходит, то скоро будет еще материал про оптимизацию Python кода на уровне синтаксиса (вангую, что сеньоры тоже удивятся некоторым выводам). Ну и разбор фишек 3.12 исходя из практики тоже на подходе.
Всего пара "лишних" строк кода, не ленитесь:
@wraps(func)
Прям только что нарвался на проблему аналогичную описаной тут:
То есть, вложенные декораторы тихо ломаются. Молодцы, вылечили неправильный __docstring __.
Тут больше дело не в починенных докстрингах, а в починенных 'annotations', из которых многие библиотеки как раз понимают, какие аргументы принимает ваша функция. Тот же FastAPI просто перестанет работать, если вы сначала обернете свою функцию без wraps
И насчет
Вложенные декораторы тихо ломаются
В 99.9% случаев как раз ничего и не ломается
Ломаются только очень специфичные кейсы наподобие того, что указан на stackoverflow, однако, решение есть и на этот случай. Которое как раз указал автор в том же топике.
Python декораторы на максималках. Универсальный рецепт по написанию и аннотированию от мала до велика