Mypy сообщает об ошибке в функции с общим типомPython

Программы на Python
Anonymous
 Mypy сообщает об ошибке в функции с общим типом

Сообщение Anonymous »

Почему Mypy сообщает о ошибке в коде ниже: < /p>

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

from typing import Self, reveal_type, Protocol

class A:
def dup(self) -> list[Self]:
return [self, self]

class B:
def dup(self) -> list[Self]:
return [self, self]

class C:
def dup(self) -> list[Self]:
return [self, self]

class HasDup(Protocol):
def dup(self) -> list[Self]: ...

def process[T: A | B | C](elem: T) -> list[T]:
reveal_type(elem.dup)
duplicated: list[T] = elem.dup()
return duplicated

process(A())
process(B())
process(C())
Ошибка:

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

main.py:25: error: Incompatible types in assignment (expression has type "list[A] | list[B] | list[C]", variable has type "list[T]")  [assignment]
< /code>
Если я заменяю t: a | B | C 
с t: hasdup или t: (a, b, c) , тогда ошибка больше не сообщается.
это Ограничение Mypy? Мне кажется, что | B | C является подтипом Hasdup .

Подробнее здесь: https://stackoverflow.com/questions/793 ... neric-type

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