1. はじめに
Pythonは動的型付け言語であり、変数の型を明示する必要がないという特徴があります。しかし、チーム開発やコードの可読性・保守性を高めるために、型ヒント(type hint)を使って変数や関数の引数・戻り値の型を明示する方法が近年注目されています。
本記事では、Python3.5以降で使える型ヒントの基本的な使い方から応用例、注意点までを初心者向けにわかりやすく解説します。
特に、実務や大規模なコードベースで活用できるヒントも交えて紹介していきます。
2. Pythonの型ヒント(type hint)の基本
2-1. 型ヒントとは?
型ヒントとは、変数や関数に対して「この値はこの型ですよ」と明示的に伝える注釈のことです。Pythonの実行自体には影響を与えませんが、エディタの補完や型チェックツール(mypy
など)で効果を発揮します。
2-2. 変数の型ヒントの基本構文
変数に対して型ヒントをつけるには、以下のような構文を使います。
name: str = "Alice"
age: int = 30
height: float = 165.5
is_active: bool = True
2-3. 関数への型ヒント
関数に対しては、引数と戻り値それぞれに型を指定できます。
def greet(name: str) -> str:
return f"Hello, {name}!"
実行結果:
Hello, Alice!
3. よくある使い方・応用例
3-1. リストや辞書などのコレクション型の型ヒント
typing
モジュールを使えば、リスト・辞書・タプルなどにも型ヒントが使えます。
from typing import List, Dict, Tuple
names: List[str] = ["Alice", "Bob", "Charlie"]
user_data: Dict[str, int] = {"Alice": 25, "Bob": 30}
point: Tuple[int, int] = (10, 20)
3-2. Optional型とUnion型
Optional
は、値があるかないか(None)の両方を許容します。
from typing import Optional, Union
def get_user_name(user_id: int) -> Optional[str]:
if user_id == 0:
return None
return "Alice"
def process(value: Union[int, float]) -> float:
return float(value * 2)
3-3. Callable(関数の型)
関数そのものを引数として渡すときはCallable
を使います。
from typing import Callable
def run_twice(func: Callable[[], None]) -> None:
func()
func()
4. 型ヒントを使う際の注意点・エラー対策
4-1. 型チェックは静的ツールが必要
型ヒントをつけても、Pythonは実行時に型エラーを検出してくれません。mypy
やpyright
などの静的解析ツールを使ってチェックする必要があります。
4-2. 型が一致しない場合の例
以下のコードは一見正しく見えますが、型チェックではエラーになります。
age: int = "30" # 実行はできるが、型ヒントと不一致
mypyのエラー:
error: Incompatible types in assignment (expression has type "str", variable has type "int")
4-3. forward reference(前方参照)の注意
まだ定義されていないクラスを型として使う場合は、文字列
で囲む必要があります。
class Node:
def __init__(self, next: 'Node' = None):
self.next = next
5. まとめ
- Python3.5以降では型ヒントを使って変数や関数の型を明示できる
- 型ヒントは可読性や保守性を高めるうえで非常に有効
typing
モジュールを使えば複雑な型も表現可能- 静的型チェックツール(mypyなど)と併用することで効果が大きくなる
実務ではチームでの開発や大規模なコードベースで型ヒントが特に役立ちます。最初はシンプルなものから導入し、徐々に応用範囲を広げていきましょう。