Python - 型ヒント(typing)の一覧

Python は動的型付け言語ですが、変数や関数の型を明示的に書くことができます。これを型ヒントと呼びます。 型ヒントは必須ではなく、実行時にも無視されます。 しかし、型ヒントを書くことで、コードの可読性や保守性が向上します。 また、型チェッカーでコードの正当性をチェックしたり、エディターの補完機能で適切な候補が表示されるようになります。

基本

基本型

書き方 import 備考
真理値 value: bool = True 不要
文字列 value: str = 'string' 不要
バイト列(不変) value: bytes = b'string' 不要
バイト列(可変) value: bytearray = bytearray() 不要
数値(int) value: int = 100 不要
数値(long) value: int = 100 不要 整数は全て int
浮動小数点数 value: float = 3.14 不要
浮動小数点数(double) value: float = 3.14 不要 Pythonではfloat
複素数 value: complex = complex(1, 2) 不要
範囲 value: range = range(1, 2) 不要
制約なし value: Any from typing import Any

None許容

None(NULL)許容とは、None を代入可能な型の事です。例えば 「int の None許容型」には 数値と None を代入できます。
書き方 import 備考
文字列 と None value: Optional[str] from typing import Optional
value: Union[str, None] from typing import Union 一般的にはOptionalを使用
value: str | None 不要

Python 3.10 で追加

Union

Union を使用すると、変数に複数の型を代入できます。多用すると型ヒントを使用するメリットが薄れます。 Python バージョン 3.10で 演算子「|」が追加されました。import 不要で Union よりも簡潔にかけますが、下位互換性が無くなります。
書き方 import 備考
文字列 か None value: Union[str, None] from typing import Union Optional[str] と同じ
value: str | None 不要 Python 3.10 で追加
文字列 か 整数 value: Union[str, int] from typing import Union
value: str | int 不要 Python 3.10 で追加
文字列 か 整数 か 真理値 value: Union[str, int, bool] from typing import Union
value: str | int | bool 不要 Python 3.10 で追加

Literal

リテラルを使用すると、指定した値以外が代入されていないかチェックできます。Literal は Python 3.8 で追加されました。
書き方 import 備考

'Yes' か 'No'

value: Literal['Yes', 'No'] from typing import Literal Python 3.8 で追加

1 か 2 か 3

value: Literal[1, 2, 3] from typing import Literal Python 3.8 で追加

'Yes' か 'No' か 1 か 0

value: Literal['Yes', 'No', 1, 0] from typing import Literal Python 3.8 で追加

関数

関数の引数

書き方 import 備考

引数なし

def func():

不要

第1引数=文字列

第2引数=整数

def func(value1: str, value2: int):

不要

関数の返り値

書き方 import 備考
文字列

def func() -> str:

return 'string'

不要
無し

def func() -> None:

return None

不要 C言語などの void に相当
文字列 か None

def func() -> Optional[str]:

return None

from typing import Optional
制約なし

def func() -> Any:

return 'any types'

from typing import Any
返り値無し

def func() -> NoReturn:

sys.exit()

from typing import NoReturn プログラムの終了(sys.exit)や必ず例外が発生するなど、呼び元に制御が戻らない関数

コンテナ

List(配列)

Pythonで他言語の配列に相当するのはList型です。array型もありますがインポートが必要で、数値しか格納できません。
書き方 import 備考
文字列のList strList: List[str] = [] from typing import List Python3.9から非推奨
strList: list[str] = [] 不要 Python3.9で追加
"None許容文字列"のList strList: List[Optional[str]] = []

from typing import List

from typing import Optional

Python3.9から非推奨
strList: list[str | None] = [] 不要 Python3.9で追加
None許容の"文字列List" strList: Optional[List[str]] = None

from typing import List

from typing import Optional

typing.List は

Python3.9から非推奨

strList: list[str] | None = None 不要 Python3.9で追加

Dict

Dict(辞書型)は、キーと値のペアを保持するコンテナです。Listではインデックスを使用して値にアクセスしますが、Dict ではキー値を使用します。
書き方 import 備考

キー = int

値 = 文字列

dic: Dict[int, str] = dict() from typing import Dict Python3.9から非推奨
dic: dict[int, str] = dict() 不要 Python3.9で追加

キー = int

値 = None許容文字列

dic: Dict[int, Optional[str]] = dict()

from typing import Dict

from typing import Optional

typing.Dict は

Python3.9から非推奨

dic: dict[int, str | None] = dict() 不要 Python3.9で追加

OrderedDict

Dictでは順序の保証はされませんが、OrderedDict は順序が保証されます。例えばループで値を取り出すとき、挿入したときと同じ順序で値が返ります。
書き方 import 備考

キー = int

値 = 文字列

dict: OrderedDict[int, str] = OrderedDict() from collections import OrderedDict

Tuple

タプルはリストのように複数の値を格納でき、インデックスで値を取り出します。リストとの違いは、作成後に値の変更や追加、削除ができません。タプルを使用する利点は、処理速度がリストよりも高速で、値の変更を防止できるため安全です。
書き方 import 備考
(文字列, 文字列) tuple: Tuple[str, str] = ('str1', 'str2') from typing import Tuple Python3.9から非推奨
tuple: tuple[str, str] = ('str1', 'str2') 不要 Python3.9で追加
(文字列, 整数) tuple: Tuple[str, int] = ('string', 1000) from typing import Tuple Python3.9から非推奨
tuple: tuple[str, int] = ('string', 1000) 不要 Python3.9で追加

Set

set(集合)は重複しない値を格納する、順序なしコレクションです。積集合、和集合、差集合、対称差 (排他的論理和)などの数学的演算をサポートします。また、リストから重複する値を排除する用途にも使用できます。
書き方 import 備考
文字列 set: Set[str] = { 'str1', 'str2' } from typing import Set Python3.9から非推奨
set: set[str] = { 'str1', 'str2' } 不要 Python3.9で追加
整数 set: Set[int] = { 100, 200 } from typing import Set Python3.9から非推奨
set: set[int] = { 100, 200 } 不要 Python3.9で追加

クラス

メソッド

書き方 import 備考
コンストラクタの戻り値

class MyClass:

  def __init__(self) -> None:

    self.foo = 0

不要
自身を引数に

class MyClass:

  def isEqual(self, target: 'MyClass') -> bool:

    return self.foo == target.foo

不要 クラス名を「'」または「"」で囲む
自身を返す

class MyClass:

  def clone(self) -> 'MyClass':

    return MyClass()

不要 クラス名を「'」または「"」で囲む

クラス変数・クラス定数

制約 書き方 import 備考
クラス変数

class MyClass:

  totalCount: ClassVar[int] = 10:

from typing import ClassVar

Python3.5.3で追加

クラス定数

(値の変更禁止)

class MyClass:

  MAX_LENGTH: Final[int] = 10

from typing import Final

finalではなく、Final

Python3.8で追加

継承

制約 書き方 import 備考
継承禁止

@final

class FinalClass:

  pass:

from typing import final

Finalではなく、final

Python3.8で追加

オーバーライド禁止

class MyClass:

  @final

  def foo(self) -> None:

    pass

from typing import final

Finalではなく、final

Python3.8で追加

クラス定数

(値の変更禁止)

class MyClass:

  MAX_LENGTH: Final[int] = 10

from typing import Final

finalではなく、Final

Python3.8で追加

その他

参考資料