Pythonは動的型付け言語ですが、プログラムの安全性や可読性を高めるために「型の確認」は重要なテクニックです。本記事では、Pythonで型を確認する代表的な方法や、実践的な使い分け、型ヒントや静的型チェックツールの活用まで、幅広く解説します。
Pythonで型を確認する基本
type()関数
- type() は、オブジェクトの「正確な型」を返します。
- 例:
number = 42
print(type(number)) # <class 'int'>
- 用途:デバッグや、厳密に型を知りたい場合に便利です。
isinstance()関数
- isinstance() は、オブジェクトが「指定した型またはそのサブクラスのインスタンスか」を判定します。
- 例:
text = "Hello"
print(isinstance(text, str)) # True
print(isinstance(text, (int, str))) # True
- 用途:継承関係を考慮した型チェックや、複数型の判定に最適です。
type()とisinstance()の違いと使い分け
比較項目 | type() | isinstance() |
---|---|---|
継承関係 | 無視する(厳密な型のみ) | サブクラスもTrue |
複数型の判定 | タプルで比較不可 | タプルで複数型を一度に判定可能 |
主な用途 | 正確な型の特定 | 柔軟な型チェック |
- 推奨:通常はisinstance()を使い、厳密な型判定が必要な場合のみtype()を使うのが一般的です。
型ヒント(型アノテーション)とtypingモジュール
Python 3.5以降では、型ヒント(Type Hints) を使って、変数や関数の引数・戻り値に型情報を明示できます。
基本的な型ヒントの書き方
def greet(name: str) -> str:
return f"Hello, {name}!"
- リストや辞書などのコレクション型は、typingモジュールを使って記述します。
from typing import List, Dict
numbers: List[int] = [1, 2, 3]
user: Dict[str, int] = {"age": 30}
- Union型(複数型の許容)やOptional型(None許容)もサポートされています。
静的型チェックツール(mypyなど)の活用
型ヒントを記述したコードは、mypyなどの静的型チェックツールで検証できます。
mypyの使い方
1.インストール
pip install mypy
2.型チェック実行
mypy your_script.py
- 型の不一致がある場合、エラーとして検出されます。
- コードの品質向上やバグの早期発見に役立ちます。
まとめと実践ポイント
- type():正確な型を知りたいときに使う
- isinstance():継承や複数型を考慮した柔軟な型チェックに使う
- 型ヒント:可読性・保守性向上、静的解析ツールと組み合わせて活用
- mypy等のツール:型ヒントを活かしてバグを未然に防ぐ
Pythonの型確認は、シンプルなコードから大規模開発まで幅広く役立ちます。状況に応じて最適な方法を選び、堅牢なプログラム作成に役立ててください。
コメント