Создание ограниченной TypeVar из UnionPython

Программы на Python
Ответить
Anonymous
 Создание ограниченной TypeVar из Union

Сообщение Anonymous »

Запуск mypy со следующим кодом не вызывает проблем.

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

from typing import TypeVar

S = TypeVar("S", int, float, complex)

def func(x: list[S], m: S) -> list[S]:
return [val * m for val in x]

out1: list[int] = func([1, 2, 3], 4)
out2: list[complex] = func([1., 2., 3.], 4.)
Но следующий код

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

from typing import TypeVar

Number = int | float | complex
S = TypeVar("S", bound=Number)

def func(x: list[S], m: S) -> list[S]:
return [val * m for val in x]

out1: list[int] = func([1, 2, 3], 4)
out2: list[complex] = func([1., 2., 3.], 4.)
отчеты

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

y.py:7: error: List comprehension has incompatible type List[Union[int, float, complex]]; expected List[S]  [misc]
y.py:7: error: Unsupported operand types for * (likely involving Union)  [operator]
Чтобы избежать проблем с mypy, я думаю, мне нужно создать ограниченную TypeVar из Union (которую я импортирую из другого пакета и, следовательно, в принципе вне моего контроля). Есть ли способ добиться этого? Есть ли другой способ (без #type: ignore), чтобы избежать проблемы с mypy?

Подробнее здесь: https://stackoverflow.com/questions/791 ... from-union
Ответить

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

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

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

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

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