考虑以下函数:
from datetime import date
def days_between(start_date: date, end_date: date) -> int:
if start_date == "initial":
start_date = date(2023, 9, 1)
delta = end_date - start_date
return delta.days
开始日期的类型提示大部分都可以,但不涵盖传递
"initial"
的情况。这是唯一允许的字符串,你会如何表达它?
我想到的选项是:
start_date: date | str
这似乎有点过分了start_date: date | "initial"
也许不错,但我还没有遇到过类似的事情为了完整性,与静态类型检查的形式正确性相比,我更感兴趣的是如何向用户传达函数的使用。
typing.Literal
from typing import Literal
def days_between(start_date: date | Literal['initial'], end_date: date) -> int:
...
从 python 3.8 开始包含此功能。
Literal
可用于向类型检查器指示带注释的对象具有与所提供的文字之一等效的值。