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]
จะถูกเปลี่ยนรูปไป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__
แทนการเข้าถึงโดยตรง
Union[datetime, type(None)]
การUnion[datetime, None]
- ตามPEP 484ใช้ภายในประเภทคำอธิบายประกอบได้รับการปฏิบัติเสมอเป็นเทียบเท่ากับNone
type(None)
(typing
เอกสารNone
ส่วนใหญ่ใช้ในกรณีส่วนใหญ่ แต่ไม่ได้อยู่ที่นี่ซึ่งเป็นการตรวจสอบ)