TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #4322 2.61K
TypedDict | Куда, зачем

Для тех, кто стремится писать поддерживаемый код, существует TypedDict («Типизированный словарь»). В этом посте разберём, зачем нужен, как правильно использовать и какие возможности открывает.

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


from typing import TypedDict

class User(TypedDict):
name: str
age: int
email: str


В обычных словарях Python ключи и значения могут быть абсолютно любыми, и это даёт большую гибкость, но вместе с тем усложняет контроль и проверку данных. TypedDict позволяет добавить статическую типизацию к словарям, тем самым снизить вероятность неожиданных ситуаций с вашими экземплярами.

В примере выше мы создаем класс User, который наследуется от TypedDict. Теперь словари типа User должны иметь ключи name, age и email с типами str, int и str соответственно.

Теперь при создании экземпляра:


user: User = {
"name": "Alice",
"age": 30,
"email": "alice@example.com"
}


если в словаре отсутствует обязательный ключ или тип значения не совпадает, современные инструменты статической типизации (например, mypy) выдадут ворнинг.


Опциональные ключи

Бывает, что не всегда все ключи словаря на месте. В TypedDict их можно сделать необязательными (total=False):


class User(TypedDict, total=False):
nickname: str
bio: str


#основы
@zen_of_python
  • ❤ 10
  • 👍 1
  • 🤗 1
More from @zen_of_python
  1. Sep 28, 2026partial или lambda: как специализировать колбэк без сюрпризов functools.partial заранее св…
  2. Sep 28, 2026Как коллизии превращают построение set в Python в квадратичную задачу Привычное O(1) для s…
  3. Sep 28, 2026Как проверять инварианты Python-кода с Hypothesis Обычный тест фиксирует конкретный ввод и…
  4. Sep 27, 2026Как запускать собственный SQL через миграции Django У models.Index нашлось необычное приме…
  5. Sep 27, 2026Как разделить синхронный и асинхронный Python-клиенты При переписывании akismet автор отка…
  6. Sep 27, 2026Как заменить цепочку isinstance на singledispatch Когда обработка типов разрастается, цепо…
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 →