PYTHON MEBY

Pythonでアノテーションを使う(typing.Annotated, Python 3.9以降)

この記事では、Python 3.9以降で導入されたtyping.Annotatedを使って型ヒントに付加情報を追加する方法を解説します。アノテーションを活用することで、より高度で分かりやすい型ヒントを記述し、コードの可読性と保守性を向上させましょう。

目次

typing.Annotatedの概要

typing.Annotatedは、型ヒントにメタデータを付加するための機能です。型ヒントに付加情報を持たせることで、静的解析ツールやIDEによるコードチェックをより詳細に行うことができます。これにより、実行時エラーを減らし、コードの信頼性を高めることが期待できます。Python 3.9以降で利用可能です。

from typing import Annotated

# Annotatedの基本的な構文
value: Annotated[int, "これはメタデータです"] = 10

基本的な使い方

Annotatedの第一引数は型ヒント、第二引数以降はメタデータです。メタデータは文字列、数値、タプルなど、様々な型を使用できます。

from typing import Annotated, List

# 型ヒントと複数のメタデータ
value: Annotated[int, 'positive', 10] = 5

# リストへのアノテーション
values: Annotated[List[str], 'lowercase'] = ['apple', 'banana']

メタデータの利用例

メタデータは、様々な目的に利用できます。例えば、データの単位、許容範囲、デフォルト値などを指定できます。

from typing import Annotated

# 単位を指定
length: Annotated[float, 'meters'] = 2.5

# 許容範囲を指定
age: Annotated[int, 'range(0, 120)'] = 30

バリデーションへの応用

メタデータを利用してバリデーションを実装することも可能です。例えば、Pydanticのようなバリデーションライブラリと組み合わせると効果的です。

from typing import Annotated
from pydantic import BaseModel, ValidationError

class User(BaseModel):
    age: Annotated[int, 'gt(18)']

try:
    user = User(age=20)
    print(user)
except ValidationError as e:
    print(e)

実践例:データクラスと組み合わせる

データクラスと組み合わせることで、より複雑なデータ構造に対して型ヒントとメタデータによるバリデーションを実現できます。

from dataclasses import dataclass
from typing import Annotated

@dataclass
class Product:
    name: Annotated[str, 'min_length=3']
    price: Annotated[float, 'ge(0)']

product = Product(name='abc', price=10.0)
print(product)

まとめ

typing.Annotatedは、型ヒントにメタデータを付加することで、コードの可読性、保守性、信頼性を向上させる強力な機能です。バリデーションライブラリと組み合わせることで、より堅牢なアプリケーション開発に役立ちます。積極的に活用し、より高品質なコードを目指しましょう。

関連記事