Появился PEP 835, который предлагает сократить запись Annotated. Если пишете на Pydantic, FastAPI, Typer или SQLModel, вы видели это каждый день:
id: Annotated\[int, Field\(gt=0\)\] name: Annotated\[str, Field\(min\_length=3\)\]PEP предлагает оператор
@ для метаданных типа:id: int @ Field\(gt=0\) name: str @ Field\(min\_length=3\)Та же
Annotated, просто запись короче.Детали из предложения:
🔘
@ связывает сильнее, чем |: запись int | str @ Meta читается как int | Annotated\[str, Meta\], а для объединения с метаданными нужны скобки \(int | str\) @ Meta;🔘цепочка
T @ m1 @ m2 разворачивается в плоскую Annotated\[T, m1, m2\], без вложенности;🔘под капотом появляется встроенный тип
types.AnnotatedType на C, а typing.Annotated станет ссылкой на него;🔘старая форма
Annotated\[X, Y\] никуда не денется, остаётся для совместимости.Сокращение нацелено на Python 3.16, до этого его можно будет пробовать через
typing\_extensions.@zen_of_python