[python] 타입 힌트로 “널링 가능”리턴 타입을 지정하는 방법

내가 기능을 가지고 있다고 가정 해보십시오.

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합니까?



답변

찾고 있습니다 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]입력 값 수단 X또는 Y.


다른 사람들이 걸려 넘어져서 Optional그 의미를 깨닫지 못할 우려 때문에 명시 적으로 표현하고 싶다면 항상 다음을 사용할 수 있습니다 Union.

from typing import Union

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

그러나 나는 이것이 좋은 생각인지 의심 Optional스러운 이름이며 의심의 여지가 몇 가지 있습니다.

Michael0x2a는 @로 의견에서 지적 Union[T, None]에 tranformed되어 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__직접 액세스하는 대신 객체의 속성 을 가져 오는 데 사용하십시오 .


답변