Python 3.12から導入されたPEP695により、型ヒントのための新しい構文が追加されました。これにより、ジェネリクスや型変数の定義方法が大きく変わりました。
型引数構文の導入
Python 3.5で導入された型ヒントは、ジェネリクスを用いることで表現力を豊かにすることができます。しかし、それを行うにはtyping
からGeneric
やTypeVar
などをインポートしてそれを継承してジェネリクスを定義する必要がありました。
PEP695では、他の現代的なプログラミング言語にあるのと同等の構文を用いて、ジェネリクスやパラメータ型を表現できるようになりました。
型エイリアス
型エイリアスは、複雑な型シグネチャを簡素化するために役立ちます。例えば、次のように定義できます。
from collections.abc import Sequence
type ConnectionOptions = dict[str, str]
type Address = tuple[str, int]
type Server = tuple[Address, ConnectionOptions]
def broadcast_message(message: str, servers: Sequence[Server]) -> None:
...
この型シグネチャは、次の型シグネチャと完全に等価です。
def broadcast_message(
message: str,
servers: Sequence[tuple[tuple[str, int], dict[str, str]]]
) -> None:
...
NewType
NewType
ヘルパーを使用して、異なる型を作成することができます。
from typing import NewType
UserId = NewType('UserId', int)
some_id = UserId(524313)
以上、Python 3.12の新機能である型引数構文について簡単に説明しました。詳細については、公式ドキュメンテーションやPEP695をご覧ください。