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

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

Сообщение Anonymous »

Почему mypy сообщает об ошибке в приведенном ниже коде:

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

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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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