Size: a a a

2021 February 01

N

Nikolay in Moscow Python
Uuwaan Voffkasson
У меня возможно холиварный вопрос, извините если что.

Насколько актуально сейчас _на практике_ знать и использовать аннотации типов?
Если погуглить, то лично у меня большинство ссылок – это статьи как уже сегодня
начать их прикручивать. Нет анализа, насколько это востребовано (за пределами
FAANG), в каких случаях, какие подводные камни и т.д. Я периодически пытаюсь
написать что-то с их использованием. Самые мои две яркие проблемы: кода
становится в разы больше (практически столько же сколько было на Delphi до
этого), и иногда бывает трудно, когда ты уже имеешь 100% рабочий несложный код,
покрытый тестами, но не можешь его аннотировать так, чтобы mypy не ругался. Эти
усилия по написанию типов, их конструированию для сложных случаев или упрощению
кода до уровня понимания mypy, они того стоят? При найме на работу это большой
плюс?
Ну, если речь идёт о написании питонокода в продакшен в компании, где нормальный CI/CD - то да, стоит потратить время. Если же это просто стартап на джанге - то можно обойтись вообще или сказать "ну, при необходимости оформлю"
источник

MN

Mikhail Novikov in Moscow Python
Uuwaan Voffkasson
У меня возможно холиварный вопрос, извините если что.

Насколько актуально сейчас _на практике_ знать и использовать аннотации типов?
Если погуглить, то лично у меня большинство ссылок – это статьи как уже сегодня
начать их прикручивать. Нет анализа, насколько это востребовано (за пределами
FAANG), в каких случаях, какие подводные камни и т.д. Я периодически пытаюсь
написать что-то с их использованием. Самые мои две яркие проблемы: кода
становится в разы больше (практически столько же сколько было на Delphi до
этого), и иногда бывает трудно, когда ты уже имеешь 100% рабочий несложный код,
покрытый тестами, но не можешь его аннотировать так, чтобы mypy не ругался. Эти
усилия по написанию типов, их конструированию для сложных случаев или упрощению
кода до уровня понимания mypy, они того стоят? При найме на работу это большой
плюс?
упарываться по дженерикам, на мой вкус, не стоит. В участках кода, где есть тесты, - тоже не стоит. А если тестов нет - то очень спасает поставить базовые аннотации
источник

MN

Mikhail Novikov in Moscow Python
за найм не подскажу, давно не в рынке
источник

UV

Uuwaan Voffkasson in Moscow Python
А тут ещё  недавно выкопал статьи на тему (правда о TypeScript). Тезисы таковы:

- аннотации типов дают _ложное_ чувство защищённости;

- аннотации типов сами по себе вносят очень мало импакта в "плотность багов";

- с багами помогают бороться тесты;

- нужно тратить время на составление аннотаций / борьбу с линтером, хотя на уровне понимания человека код уже точно рабочий.

https://medium.com/javascript-scene/you-might-not-need-typescript-or-static-types-aa7cb670a77b

https://medium.com/javascript-scene/the-typescript-tax-132ff4cb175b

https://medium.com/javascript-scene/the-shocking-secret-about-static-types-514d39bf30a3
источник

MN

Mikhail Novikov in Moscow Python
с ТС геморрой, конечно, каждый раз вспоминать, как редакс типизировать, когда делаешь это раз в полгода, как я
но, каким бы ни был этот геморрой - когда после проекта на TS пересаживаешься на JS - чувствуешь себя слепым котенком
источник

MN

Mikhail Novikov in Moscow Python
вообще ничего непонятно
источник

M

Maxim in Moscow Python
Мне в петоне понравилось
источник

UV

Uuwaan Voffkasson in Moscow Python
Mikhail Novikov
упарываться по дженерикам, на мой вкус, не стоит. В участках кода, где есть тесты, - тоже не стоит. А если тестов нет - то очень спасает поставить базовые аннотации
Ну, по сути ведь любой код на Python в том или ином виде уже дженерик, в нём уже есть гибкость, тот самый duck typing. Например на входе у меня дерево xml, я дёргаю два метода: xpath() и text(). И я могу ему туда хоть JSON в обёртке давать вместо XML. Чтобы объяснить это mypy, нужно либо городить описание на основе Protocol, либо отказаться от гибкости указать конкретный класс. Разве это не печально?
источник

SZ

Shagit Ziganshin in Moscow Python
Maxim
Мне в петоне понравилось
На расте попиши
источник

ST

Storm Trooper in Moscow Python
Яруками Жмукакаши
Оскорбление чувств голодных!
😹😹😹👍🏼
источник

M

Maxim in Moscow Python
Особенно то как это используют fast api и typer
источник

N

Nikolay in Moscow Python
Mikhail Novikov
упарываться по дженерикам, на мой вкус, не стоит. В участках кода, где есть тесты, - тоже не стоит. А если тестов нет - то очень спасает поставить базовые аннотации
А причём тут дженерики?
источник

UV

Uuwaan Voffkasson in Moscow Python
Mikhail Novikov
с ТС геморрой, конечно, каждый раз вспоминать, как редакс типизировать, когда делаешь это раз в полгода, как я
но, каким бы ни был этот геморрой - когда после проекта на TS пересаживаешься на JS - чувствуешь себя слепым котенком
Ты имеешь в виду навигацию по коду и какие-то подсказки от IDE?
источник

M

Maxim in Moscow Python
Ну кстати то что ide это подхватывает - тоже суперудобно
источник

N

Nikolay in Moscow Python
Uuwaan Voffkasson
Ну, по сути ведь любой код на Python в том или ином виде уже дженерик, в нём уже есть гибкость, тот самый duck typing. Например на входе у меня дерево xml, я дёргаю два метода: xpath() и text(). И я могу ему туда хоть JSON в обёртке давать вместо XML. Чтобы объяснить это mypy, нужно либо городить описание на основе Protocol, либо отказаться от гибкости указать конкретный класс. Разве это не печально?
Да вроде нормально. Вообще полезная привычка - строго типизировать внешние данные
источник

MN

Mikhail Novikov in Moscow Python
Nikolay
А причём тут дженерики?
они сложные :)
источник

MN

Mikhail Novikov in Moscow Python
Uuwaan Voffkasson
Ты имеешь в виду навигацию по коду и какие-то подсказки от IDE?
да, особенно по чужому коду
источник

UV

Uuwaan Voffkasson in Moscow Python
Nikolay
Да вроде нормально. Вообще полезная привычка - строго типизировать внешние данные
С внешними данными разговор действительно особый. Мне понравился pydantic, например.
источник

N

Nikolay in Moscow Python
Mikhail Novikov
они сложные :)
Но не в питоне же. В питоне без проверки типов и так уже обобщённое программирование
источник

MN

Mikhail Novikov in Moscow Python
Nikolay
Но не в питоне же. В питоне без проверки типов и так уже обобщённое программирование
я сломался, когда пытался типизировать параметризованный декоратор. Коллабл, который принимает коллабл и возвращает коллабл, которые принимает коллабл, и тд
источник