Вы можете думать о библиотеке typing
как о спецификации того, как объявлять определенные типы.Если что-то не определено в этой спецификации, то всегда лучше предположить, что это неопределенное поведение.
Однако в конкретном случае с python и типизацией у нас есть средство проверки статического типа с типом ссылки, которое равно mypy .Поэтому, чтобы получить ответ на ваш вопрос или просто программно проверить типы, мы можем использовать его и посмотреть, показывает ли он какие-либо предупреждения.
Вот пример:
$ cat check_optional.py
import typing
def fn(x: typing.Optional[int, str]):
pass
$ mypy check_optional.py
check_optional.py:3: error: Optional[...] must have exactly one type argument
Так что нетOptional[T, U]
невозможно с точки зрения mypy, даже если нет проблем с объявлением его в библиотеке typing
.
Кроме того, с точки зрения "функционального программирования", Optional
и Union
являются двумя различными, нохорошо известные и четко определенные монады .Комбинация из двух монад (Optional[T, U, None]
) является другой монадой, которая, однако, ведет себя не так, как Optional
, и поэтому не должна называться так.