型ヒントを使用して「null 許容」の戻り値の型を指定する方法 質問する

型ヒントを使用して「null 許容」の戻り値の型を指定する方法 質問する

次のような関数があるとします。

def get_some_date(some_argument: int=None) -> %datetime_or_None%:
    if some_argument is not None and some_argument == 1:
        return datetime.utcnow()
    else:
        return None

戻り値の型を指定するにはどうすればよいですかNone?

ベストアンサー1

あなたが探していますOptional

datetime戻り値の型は( から返されるものdatetime.utcnow())か、 のいずれかになるので、Noneを使用する必要がありますOptional[datetime]

from typing import Optional

def get_some_date(some_argument: int=None) -> Optional[datetime]:
    # as defined

入力に関するドキュメントによると、Optional次の省略形です:

Optional[X]は と同等ですUnion[X, None]

ここで、 は型または のUnion[X, Y]値を意味します。XY


Optional他の人が偶然見つけて意味が分からないかもしれないという懸念から、明示的に表現したい場合は、次のようにしますUnion

from typing import Union

def get_some_date(some_argument: int=None) -> Union[datetime, None]:

しかし、これは良いアイデアではないと思います。これはOptional指示的な名前であり、キー入力を数回節約できます。

@Michael0x2a のコメントで指摘されているように、Union[T, None]に変換されるUnion[T, type(None)]ため、ここで使用する必要はありませんtype

見た目は異なるかもしれませんが、プログラム的にはどちらの場合も結果はまったく同じです。*Union[datetime.datetime, NoneType]に格納される型は次のようになります。get_some_date.__annotations__

>>> from typing import get_type_hints
>>> print(get_type_hints(get_some_date))
{'return': typing.Union[datetime.datetime, NoneType],
 'some_argument': typing.Union[int, NoneType]}

*typing.get_type_hintsオブジェクトの属性に直接アクセスするのではなく、それを取得するために使用します__annotations__

おすすめ記事