コンテンツにスキップ

高度な Python の型

🌐 AI と人間による翻訳

この翻訳は、人間のガイドに基づいて AI によって作成されました。🤝

原文の意図を取り違えていたり、不自然な表現になっている可能性があります。🤖

AI LLM をより適切に誘導するのを手伝う ことで、この翻訳を改善できます。

英語版

Python の型を扱うときに役立つ追加のアイデアをいくつか紹介します。

Union または Optional の利用

何らかの理由で | が使えない場合、たとえば型アノテーションではなく response_model= のような場所では、縦棒(|)の代わりに typingUnion を使えます。

例えば、str または None になり得ることを宣言できます:

from typing import Union


def say_hi(name: Union[str, None]):
        print(f"Hi {name}!")

typing には、None を取り得ることを宣言するための短縮形として Optional もあります。

ここからは私のとても主観的な提案です:

  • 🚨 Optional[SomeType] の使用は避けましょう
  • 代わりに ✨ Union[SomeType, None] を使いましょう ✨。

どちらも等価で内部的には同一ですが、「optional(任意)」という語が値が任意だと誤解させやすく、実際の意味は「None を取り得る」であり、任意ではなく依然として必須である場合でもそうです。そのため Optional より Union を勧めます。

Union[SomeType, None] の方が意味がより明確だと思います。

これは用語や名前付けの話に過ぎませんが、その言葉があなたやチームメイトのコードの捉え方に影響します。

例として次の関数を見てみましょう:

from typing import Optional


def say_hi(name: Optional[str]):
    print(f"Hey {name}!")

パラメータ nameOptional[str] と定義されていますが、任意ではありません。このパラメータなしで関数を呼び出すことはできません:

say_hi()  # あっ、これはエラーになります!😱

name パラメータにはデフォルト値がないため、依然として必須(任意ではない)です。ただし、name は値として None を受け付けます:

say_hi(name=None)  # これは動作します。None は有効です 🎉

朗報として、多くの場合は単純に | を使って型の Union を定義できます:

def say_hi(name: str | None):
    print(f"Hey {name}!")

したがって、通常は OptionalUnion といった名前を気にする必要はありません。😎