「Pythonの型 Optionalは必須を意味することもある」
「Optional型は必須の意味合いも持つPythonの型」
PYTHON PROGRAMMING
タイピング.Optionalの頻繁な誤用と誤解を避ける方法を学ぶ
Pythonのドキュメンテーションによると、typing.Optional
はオブジェクトがNone
であることを示す便利な方法です。この概念を簡潔かつエレガントに表現する方法ですが、それは明確でしょうか?
この質問を言い換えてみましょう。Pythonの文脈で「オプション」という言葉を見たとき、それはどういう意味だと思いますか? x
という名前の引数で、Optional[int]
という型が指定されている場合を想像してください。おそらくint
は整数を指し、だが、「Optional」はどういう意味なのでしょうか? 最初の印象はなんでしょう?
以下の2つのオプションを考慮してみましょう:
x
の値を指定する必要がない場合、それはオプションです。x
の値はint
またはNone
のいずれかである可能性があります。
Pythonの型ヒントに精通している場合、オプション2が正しいとわかるでしょう。しかし、知らない場合… もしかすると私が間違っているかもしれませんが、Pythonを知らない人がオプション2を選ぶことは想像できません。ほとんどの人にとっては、オプション1の方が意味があるように思えます。何かがオプションであるという情報を見たとき、私は… まあ、それがオプションであると思う…という意味です。
この問題は、typing.Optional
型の頻繁な誤用につながります。この記事は、この誤用を明らかにし、この型の正しい理解へのガイドとなることを目指しています。
typing.Optional
の意味
次の3つの型ヒントは等価です:
from typing import Optional, Unionx: Union[str, None]x: Optional[str]x: str | None
これらすべてが同じ情報を伝えます: x
は文字列またはNone
のいずれかである可能性があるということです。これは完全に有効ですが、最初のもの(Union[str, None]
)はPythonの型ヒントの初期段階を表しており、必ずしも現在の方法とは言えません。その後、typing
モジュールにOptional
が追加され、この概念をより簡潔かつ明確に表現する方法が提供されました。 mypyのドキュメンテーションによれば:
Optional[int]
などのように、None
を許容する型変種を定義するためにOptional
型修飾子を使用できます(Optional[X]
はUnion[X, None]
の短縮形として好まれます)。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles