🏷️
Type Hints — ランタイムでは何もしない
Pythonの型ヒントが「ヒント」である理由と、Pydanticがこれを克服する方法
def add(a: int, b: int) -> int:
return a + b
add('hello', 'world') # エラーにならない!'helloworld'を返す
Pythonランタイムは型ヒントを完全に無視する。__annotations__辞書に保存するだけで検査しない。設計上の決定 — 動的型付けの柔軟性を維持しつつツールサポートを追加。
では何に使うか
- mypy/pyright — 実行前に型不一致を検出
- IDE自動補完 — VS Codeが
.で該当型のメソッドを表示 - 文書化 — コードを読む人が引数/返却型を即座に把握
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 — リクエスト/レスポンスのランタイム型検証