2016-09-10 3 views
34

は私が機能を持っていると仮定しヒント

答えて

58

あなたの戻り値の型は、あなたがOptional[datetime]を使用する必要がありますNonedatetimeこと(datetime.utcnow()から返される)か、どちらかので:

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は指標名であり、いくつかのキーストロークを保存します。

としてはUnion[T, type(None)]にここtypeを使用するので、必要にtranformedされていないMichael0x2a Union[T, None] @によってコメントで指摘しました。

視覚的にはこれらは異なる可能性がありますが、どちらの場合も結果はと全く同じです。オブジェクトをつかむために

>>> 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__代わりにそれを直接アクセスする属性:Union[datetime.datetime, NoneType]get_some_date.__annotations__*に保存されているタイプになります。

+0

[PEP 484](https://www.python.org/dev/peps/pep)に従って、Union [datetime、type(None)]を 'Union [datetime、None]'に単純化できます。 -0484 /#using-none)、型アノテーション内で 'None'を使うことは' type(None) 'と等価であると常に扱われます。 ( 'typing'ドキュメントは実際にはほとんどの場合' None'を使いますが、ここでは監視しません)。 – Michael0x2a

+0

@ Michael0x2aは、興味深いことを知らなかった。それを追加しました:) –

+1

私は先に進んで[a patch](http://bugs.python.org/issue28073)を提出してこれを直ちに修正しました。うまくいけば、ドキュメントは近い将来これについてより一貫性があります! – Michael0x2a