Pythonの型ヒント(Type Hints)とは?mypyを使った型チェック方法を初心者向けに解説
先生と生徒の会話形式で理解しよう
生徒
「先生、Pythonって型を指定しなくても動くって聞きましたけど、なぜ型ヒントって必要なんですか?」
先生
「型ヒントは、エディターの補完を助けたり、バグを事前に見つけたりできる補助的な仕組みです。mypyというツールを使えば、動かす前に型のチェックができますよ。」
生徒
「エラーになる前に間違いがわかるって安心ですね!具体的な使い方が知りたいです。」
先生
「では、まず型ヒントとは何か、そのしくみから見ていきましょう!」
-
1. 型ヒント(Type Hints)とは?
Pythonは「動的型付け言語」と呼ばれ、型の指定がなくても動きます。でも、コードを読み返したり他人と共有するとき、何のデータを扱うか分かりにくくなることがあります。
そこで、Python 3.5 から型ヒントという「型を教える注釈」が導入されました。例えば、変数にage: int = 25
と書くと、「ageは整数を期待する」と明示できます。
2. なぜ型ヒントが重要?
- コードが分かりやすくなる(自分にも他人にも)
- エディターが補完やヒントをくれる
- 静的解析ツールでバグを早期発見できる
まるで、料理レシピで「卵」「牛乳」と材料名が書いてあるように、コードにも期待する型が明確に書いてあると安心です。
3. 基本の書き方(変数・関数)
age: int = 25
name: str = "たろう"
def greet(name: str) -> str:
return f"こんにちは、{name}さん!"
変数に: 型
、関数には引数と戻り値に型を指定しています。こう書くだけで、何が入ってくるか明確になります。
4. リストや辞書の型を指定する
コレクション型は、typing
モジュールを使って中身の型も書きます。
from typing import List, Dict, Optional
numbers: List[int] = [1, 2, 3]
user_ages: Dict[str, int] = {"たろう": 20}
def get_user_age(name: str) -> Optional[int]:
return user_ages.get(name)
-
5. mypyを使った型チェックのやり方
mypyは型ヒントに従ってコードをチェックするツールです。以下の手順で使います:
pip install mypy
mypy sample.py
エラーがあれば、「intの変数に文字列を入れた」「引数に違う型を渡した」などを教えてくれます。
6. 応用:Optional(Noneを許容)やUnion(複数型対応)
Optional[X]
で「X型かNone」の意味、Union[X, Y]
で「XまたはY型」の意味になります。
from typing import Optional, Union
def divide(a: int, b: int) -> Optional[float]:
if b == 0:
return None
return a / b
data: Union[int, str] = 42
data = "文字列もOK"
7. 型エラーを見つけて修正する例
def add(a: int, b: int) -> int:
return a + b
result = add("5", 10) # ここでmypyがエラーを出します
mypyを実行すると、「strを入れているよ」というエラーを出してくれるので、すぐに気づけます。
8. まとめに代わるポイント整理
- 型ヒントはコードの見通しを良くするメモ書き
- mypyで実行前に型の間違いを見つけられる
- OptionalやUnionで柔軟に型を指定できる
- プログラミング未経験者ほど恩恵があるツールです