TGViewer
Находки в опенсорсе Находки в опенсорсе @opensource_findings · 12.6K subscribers
Post #948 11K
PEP-747: TypeForm, или "аннотируем аннотации"

PEP: https://peps.python.org/747
Реализация: https://github.com/python/cpython/pull/145034

Что и зачем?

Представьте, что вам нужно описать, что какая-то функция может принять в качестве входного аргумента любую аннотацию. Например для валидации как в пидантике. Как бы вы такое сделали?

type[T]?


from typing import Any

def validate[T](typ: type[T], value: Any) -> None: ...

validate(int, 1)


Но, на самом деле у нас тут есть ошибка. typ будет ожидать любой объект класса type, а не любую аннотацию.
Например, int | str не является объектом класса type, но является валидной аннотацией. Так же как и: None, Literal[1], Self, T, тд.

Пример в pyright.

Данная фича реально нужна авторам библиотек, кто строит свою логику работы на типах.
Реальный пример: в django-modern-rest (нативная интеграция 🌚️️️️) мы создаем метаданные об ответе ResponseSpec(return_type=int | str, status_code=200) для такого кода пользователя:


from dmr import Controller
from dmr.plugins.msgspec import MsgspecSerializer

class UserController(Controller[MsgspecSerializer]):
async def get(self) -> int | str: ...


На данный момент ResponseSpec.return_type имеет аннотацию Any, как единственный рабочий вариант.
Но в идеале мы будем использовать TypeForm[Any] в ближайшее время.

Как и многие другие:
• pydantic
• msgspec
• dishka (использует аннотации для DI)
• Даже некоторые места stdlib, например: dataclasses.fields

Итоговый пример:


from typing_extensions import TypeForm, Any

def validate[T](typ: TypeForm[T], value: Any) -> T: ...

reveal_type(validate(int, 1)) # int
reveal_type(validate(int | str, 1)) # int | str


Текущее состояние

В typing_extensions код уже есть, поддержка в mypy будет в версии 1.20 (следующей).
В pyright поддержка уже есть полтора года как.
В Python3.15 будет нативно в typing.

Еще одна хорошая фича.

Обсуждение: какие варианты использования TypeForm есть у вас?

| Поддержать | YouTube | GitHub | Чат |
Python Enhancement Proposals (PEPs) PEP 747 – Annotating Type Forms | peps.python.org Type expressions provide a standardized way to specify types in the Python type system. When a type expression is evaluated at runtime, the resulting type form object encodes the information supplied in the type expression. This enables a variety of use...
  • ❤ 69
  • 🔥 26
  • 👍 22
  • 💩 4
  • 👌 1
More from @opensource_findings
  1. Sep 15, 2026PEPы в Python окончательно вышли из-под контроля Давайте посмотрим, что происходит с ПЕПам…
  2. Sep 10, 2026Большая бесплатная конференция в Нижнем Новгороде 17 октября Регистрация: https://itgorky.…
  3. Sep 1, 2026Post #985
  4. Aug 24, 2026JIT могут удалить из CPython! PEP-836: https://peps.python.org/pep-0836 JIT в CPython имее…
  5. Aug 18, 2026Как AWS у опенсорсера пакеты отжимал Нерегулярная рубрика "посмотрите, что творится!". Дан…
  6. Aug 14, 2026Какие уникальные фичи есть в django-modern-rest? Иногда, когда я добавляю какие-то фичи в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →