Pythonは動的型付けのプログラミング言語ですが、3.5から型ヒント(Type Hints)が導入されました。型ヒントは静的型付け言語のように型によるチェックができるようになる一方で、実行時には影響を及ぼしません。つまり型ヒントはアノテーションです。

この記事では、型ヒントに含まれているUnionTypeVarの違いについて説明します。

UnionとTypeVarの基本

Unionは「str or int」のように「いくつかのある型のうちいずれか」にマッチすればOKという型ヒントです。一方、TypeVarはジェネリクスの型変数を定義するための型ヒントです。

from typing import TypeVar, Union

U = Union[str, int]
T = TypeVar("T", str, int)

def test_union(p: U): pass
def test_typevar(p: T): pass

test_union(1) # OK
test_union("union") # OK
test_union(None) # NG

test_typevar(2) # OK
test_typevar("typevar") # OK
test_typevar(None) # NG

上記のコードでは、test_uniontest_typevarという2つの関数を定義しています。それぞれの関数は、引数としてUnionまたはTypeVarを使用しています。

UnionとTypeVarの違い

UnionTypeVarの主な違いは、Unionが複数の型を許容するのに対し、TypeVarは同じ型を必要とする点です。

from typing import TypeVar, Union

U = Union[str, int]
T = TypeVar("T", str, int)

def test_union(p1: U, p2: U): pass
def test_typevar(p1: T, p2: T): pass

test_union(1, 2) # OK
test_union("union", "onion") # OK
test_union(1, "onion") # OK

test_typevar(1, 2) # OK
test_typevar("typevar", "foobar") # OK
test_typevar(1, "foobar") # NG

上記のコードでは、test_union関数は引数p1p2が異なる型でも問題ありません。一方、test_typevar関数は引数p1p2が同じ型であることを要求します。

まとめ

Pythonの型ヒントは、コードの可読性と安全性を向上させるための重要なツールです。UnionTypeVarは、型ヒントの中でも特に重要な概念で、それぞれが提供する柔軟性と厳密性を理解することは、効果的な型ヒントの使用にとって重要です。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です