Как ввести аннотацию другого типа возвращаемого значения в зависимости от того, задан ли параметр, как в случае функции 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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