Невыразимое невалидное. Часть 1. Данные

Знакомый сценарий: фильтр или конструктор запросов начинается с одного опрятного класса, а через месяц в нём value: Any, валидатор на сотню строк и ветка, дописанная ночью перед релизом, — её забыли покрыть тестом, и она падает в проде. Разбираем контринтуитивный выход: не «добавить ещё проверок», а сделать невалидное состояние таким, чтобы его нельзя было даже собрать. В первой части — сами данные: сумма-типы, дискриминированные union’ы и точные значения в pydantic; и где всё это ловит тайп-чекер, а где остаётся рантайму.

https://habr.com/ru/articles/1049560/

#pydantic #python #типы_данных #типизация #аннотация_типов #mypy #discriminated_unions

Невыразимое невалидное. Часть 1. Данные

Любой, кто писал конструктор запросов или фильтр над пользовательским вводом, знает, как это начинается. Сначала модель данных — это один простой класс, и кажется на этом всё. Через пару месяцев в нём...

Хабр

3 ошибки при работе с dataclasses в Python

Dataclasses появились в Python 3.7 и быстро стали стандартом: меньше бойлерплейта, чем у обычных классов, проще, чем attrs, и не требуют зависимостей. Выглядят настолько просто, что кажется, что ломаться там нечему. Но у них есть три ловушки, которые не видны при написании. Разобрать ошибки

https://habr.com/ru/companies/otus/articles/1034394/

#python #типизация_Python #наследование_классов #dataclasses #mypy #ошибки_python

3 ошибки при работе с dataclasses в Python

Dataclasses появились в Python 3.7 и быстро стали стандартом: меньше бойлерплейта, чем у обычных классов, проще, чем attrs, и не требуют зависимостей. Выглядят настолько просто, что кажется, что...

Хабр

@itamarst At least release announcements on https://mypy-lang.blogspot.com/ used to be useful for packaging, now I have to run it through AI to make it at least a bit comprehensible.

#MyPy #Python

The Mypy Blog

Updates about mypy, an optional static type checker for Python

I just … just … who in the world reads these #Mypy Release Notes https://mypy.readthedocs.io/en/stable/changelog.html ? It has 775 lines! Without any deep study it is on average 10 minutes of just reading. Apparently this monster is so big that even Mypy developers are not able to distil it into something readable (https://mypy-lang.blogspot.com/2026/03/mypy-120-released.html has again just dump of this novel).

#Python

Mypy Release Notes - mypy 1.20.0 documentation

Практики разработки на Python

Привет, Хабр! Меня зовут Роман, я программист в команде «Гравитон» и моя задача в компании — разработка API/CLI интерфейсов и приложений на языке Python. Цель данной статьи в том, чтобы показать как через внедрение «типовых подходов» и вспомогательных библиотек/утилит очень сильно упрощается поддержка проекта в настоящем (при передаче другому человеку или разработке в команде) и в будущем (возобновили проект спустя время). Первое, что нужно сказать — проект на Python это не только сам Python , но и множество технологий используемых вместе (Git, Docker, и т.д.). В этой статье мы сконцентрируемся на самом проекте, а именно с чего начать, что прикрутить, что учитывать при разработке.

https://habr.com/ru/companies/graviton/articles/1015460/

#бэкенд #Python #uv #ruff #mypy #практики

Практики разработки на Python

Привет, Хабр! Меня зовут Роман, я программист в команде «Гравитон» и моя задача в компании — разработка API/CLI интерфейсов и приложений на языке Python. Цель данной статьи в том, чтобы показать как...

Хабр
Vercel Just Proposed a TypeScript-Inspired Upgrade to Python's Type System

Vercel engineers spent a year building PEP 827 — a proposal that could give Python the programmable type system TypeScript developers have always taken for granted.

TechLife

When installing dependencies, formatting code, linting it, type-checking it, and building docs with #Poetry or #PDM, #Black, #Flake8, #Mypy and #MkDocs would previously take from 2min to several more, it now takes less than 15 seconds for the whole thing, thanks to #uv, #Ruff, #ty and #Zensical.

This is for 5 #Python versions (3.10 to 3.15).

The DX got much better 🥰

Is there any way linter/type checker for #Python that can find expressions that never will evaluate to anything other than False based on the type information? E.g. checking if a variable of the type `int` exists within a list of the type `list[str]`? I do use #mypy but it doesn't seem to catch this.

Git-хуки, которые не дают коммитить плохой код

Здравствуйте, коллеги программисты! Большинство фейлов в CI — это мелочи: забытый console.log , форматирование, линт, сломанный импорт, файл без теста. Такие ошибки не должны доезжать до сборки или код-ревью. Git-хуки позволяют запускать проверки прямо во время git commit и блокировать коммит, если были обнаружены нарушения. В прошлой статье я рассказывал про скрипты, которые я использую для проверки качества кода в PHP/Laravel. В этой статье я хочу рассказать о скриптах для JavaScript/TypeScript и Python — линтинг, форматирование, тесты, статический анализ и проверка наличия тестов. Все скрипты описанные в статье находятся здесь - https://github.com/prog-time/git-hooks

https://habr.com/ru/articles/993870/

#линтер #git_hooks #javascript #python #eslint #prettier #tsc #vitest #mypy #pytest

GitHub - prog-time/git-hooks: Useful shell scripts for git hooks

Useful shell scripts for git hooks. Contribute to prog-time/git-hooks development by creating an account on GitHub.

GitHub

The only criticism I have of types in Python:

Python is a really good dynamically typed language. Since classes are themselves instances of a class-describing object, you can do what other languages have to do with text-transforming macros by just treating the class as mutable and dynamically adding things like methods.

... and then the type system kicks your ass for doing that, so you're left with a few not-great options.

#python #mypy