MyPy meldet einen Fehler in der Funktion mit generischen Typen

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: MyPy meldet einen Fehler in der Funktion mit generischen Typen

by Guest » 27 Jan 2025, 08:04

Warum meldet mypy einen Fehler im folgenden Code:

Code: Select all

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())
< /code>
Der Fehler lautet: < /p>
main.py:25: error: Incompatible types in assignment (expression has type "list[A] | list[B] | list[C]", variable has type "list[T]")  [assignment]

< /code>
Wenn ich t: a | ersetze B | C 
mit T: Hasdup oder t: (a, b, c) , dann wird der Fehler nicht mehr gemeldet.
ist das a Einschränkung von MyPy? Es scheint mir wie a | B | C ist ein Subtyp von Hasdup .

Top