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