Цель состоит в том, чтобы перегрузить функцию и разрешить несколько типов ввода с определенным пользователем когерентным выходом.
Таким образом, я установил Type[TypeVar]
из str
или datetime.date
(второй аргумент функции со значением по умолчанию =str
), где функция будет выводить соответствующую TypeVar
.
Ниже приведена базовая функция c (которую я буду расширять, как только эта версия будет исправлена):
from typing import TypeVar, Type
from datetime import date, datetime
DateOutType = TypeVar('DateOutType', str, date)
def date2str(t: date, out_format: Type[DateOutType]=Type[str]) -> DateOutType:
''' Converts datetime.date to string (YYYY-MM-DD) or datetime.date output.
'''
if out_format is str:
return t.strftime('%Y-%m-%d')
elif isinstance(t, datetime):
return t.date()
else:
return t
# Usage example:
dt = datetime.now()
res = date2str(dt, out_format=date)
assert type(res) == date
res = date2str(dt.date(), out_format=str)
assert type(res) == str
mypy выдает ошибку в операторах return (TypeVar, похоже, не работает так, как я ожидал):
first return statement: error: Incompatible return value type (got "str", expected "date")
second return statement: error: Incompatible return value type (got "date", expected "str")
third return statement: error: Incompatible return value type (got "date", expected "str")
Есть идеи? Есть ли лучший способ написать этот код с правильной аннотацией типа?