🏷️

Type Hints — ランタイムでは何もしない

Pythonの型ヒントが「ヒント」である理由と、Pydanticがこれを克服する方法

def add(a: int, b: int) -> int:
    return a + b

add('hello', 'world')  # エラーにならない!'helloworld'を返す

Pythonランタイムは型ヒントを完全に無視する。__annotations__辞書に保存するだけで検査しない。設計上の決定 — 動的型付けの柔軟性を維持しつつツールサポートを追加。

では何に使うか

  1. mypy/pyright — 実行前に型不一致を検出
  2. IDE自動補完 — VS Codeが.で該当型のメソッドを表示
  3. 文書化 — コードを読む人が引数/返却型を即座に把握

Pydanticがランタイム型検査する方法

Pydanticは__annotations__を読み、フィールドごとにvalidatorを生成、__init__で検証。V2はRust製pydantic-coreで検証ロジック実行。

Pythonの型ヒント自体は何もしないが、Pydanticがその「何もしない」メタデータを読んでランタイム検証を構築する構造。

キーポイント

1

Pythonランタイムは型ヒントを無視 — __annotations__に保存のみ

2

mypy/pyrightが静的に型不一致を検出

3

Pydanticは__annotations__を読んでランタイム検証を構築

4

FastAPIはPydanticを通じてリクエストデータの型を自動検証

ユースケース

CIにmypy連携 — 型エラーをデプロイ前に検出 FastAPI + Pydantic — リクエスト/レスポンスのランタイム型検証