Как ввести аннотацию другого типа возвращаемого значения в зависимости от того, задан ли параметр, как в случае функции Python

Программы на Python
Anonymous
Как ввести аннотацию другого типа возвращаемого значения в зависимости от того, задан ли параметр, как в случае функции

Сообщение Anonymous »

Код: Выделить всё

next()Функция 
имеет специальное свойство: next(iterable) возвращает элемент или вызывает исключение, а next(iterable, None) возвращает элемент или None.
Как набрать аннотацию? Рассмотрим следующее: я использую Pyright для проверки:

Код: Выделить всё

from typing import TypeVar, Union

R = TypeVar('R')

class SuperNone:
pass

class MyDict:
data = { "a": 1 }

def get(
self, key: str, default: R = SuperNone
) -> Union[R, Elem] if R == SuperNone else Elem:
try:
return self.data[key]
except KeyError:
if isinstance(default, SuperNone):
raise
else:
return default

a: int = MyDict().get("a")  # Expression of type "SuperNone | int" cannot be assigned to declared type "int"
b: Union[int, str] = MyDict().get("a", "")

# vs next() function is fine:
c: int = next((x for x in [1]))
d: Union[int, str] = next((x for x in [1]), "")
Это не работает, как «динамически» сделать возвращаемое значение набора?

Подробнее здесь: https://stackoverflow.com/questions/774 ... r-is-given

Вернуться в «Python»