내가 기능을 가지고 있다고 가정 해보십시오.
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__
직접 액세스하는 대신 객체의 속성 을 가져 오는 데 사용하십시오 .