Pull to refresh

Comments 9

Ну, скорее опечатка. Причем я ее с 5го раза только смог найти после того, как вы сказали. Спасибо, что заметили)

И в заключении, наверное, Вы хотели сказать "сценарии".

UFO just landed and posted this here

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

Сначала подумал: "ну что там особо нового еще может быть...?". В итоге с интересом дочитал до конца. Автору спасибо за статью.

Я сам столкнулся с тем, что какого-либо "продвинутого" материала по разработке почти нет. Если ты джун - вот тебе "hello world", но если решил сделать что-то дальше, то "ты уже большой мальчик, копай сам".

Поэтому и решил сделать что-то чуть более глубокое, чем обычные забивки в блогах. Тем более опыт и количество набитых шишек позволяет рассказать что-то интересное.

Если такой формат заходит, то скоро будет еще материал про оптимизацию Python кода на уровне синтаксиса (вангую, что сеньоры тоже удивятся некоторым выводам). Ну и разбор фишек 3.12 исходя из практики тоже на подходе.

Всего пара "лишних" строк кода, не ленитесь:

@wraps(func)

Прям только что нарвался на проблему аналогичную описаной тут:

python - Why does functools.update_wrapper update the __dict__ in the wrapper object? - Stack Overflow

То есть, вложенные декораторы тихо ломаются. Молодцы, вылечили неправильный __docstring __.

Тут больше дело не в починенных докстрингах, а в починенных 'annotations', из которых многие библиотеки как раз понимают, какие аргументы принимает ваша функция. Тот же FastAPI просто перестанет работать, если вы сначала обернете свою функцию без wraps

И насчет

Вложенные декораторы тихо ломаются

В 99.9% случаев как раз ничего и не ломается

Ломаются только очень специфичные кейсы наподобие того, что указан на stackoverflow, однако, решение есть и на этот случай. Которое как раз указал автор в том же топике.

Sign up to leave a comment.

Articles