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で追加 |