Python|型ヒント(type hint)を使って変数の型を明示する方法【Python3.5以降】

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は実行時に型エラーを検出してくれません。mypypyrightなどの静的解析ツールを使ってチェックする必要があります。

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など)と併用することで効果が大きくなる

実務ではチームでの開発や大規模なコードベースで型ヒントが特に役立ちます。最初はシンプルなものから導入し、徐々に応用範囲を広げていきましょう。

タイトルとURLをコピーしました