yiskw note

機械学習やプログラミングについて気まぐれで書きます

【Python】変数の型以外のメタ情報をアノテーションするtyping.Annotated


はじめに

今回はtyping.Annotatedを用いて,変数に型以外のメタ情報もアノテーションする方法について調べたので,こちらにメモを残しておきます.
こちらを使うことで,より可読性の高いコードが書けるようになります

typing.Annotatedとは

typing.Annotatedを用いることで,変数に型以外のメタ情報もアノテーションすることができます.
これらのメタ情報はmypyでは考慮されないもので,単に可読性を向上させることを目的としているようです.

以下の例を考えます.重さと体積から密度を計算する関数です.

def get_density(weight: float, volume: float) -> float:
    return weight / volume

こちらの関数は型アノテーションがされており,一見問題ないように見えますが,weightvolumeの単位がわかりません.
単位の情報を明示するため方法として,コメントに残すのもありですが,typing.Annotatedを使用することで,よりわかりやすくコードを書くことができます.

from typing import Annotated


def get_density(
    weight: Annotated[float, "kg"], volume: Annotated[float, "cubic metre"]
) -> Anntated[float, "kg per cubic metre"]:

    return weight / volume

参考