Page 1 of 1

Geben Sie die Invarianz in generischer Klasse ein, wenn Callable beteiligt ist

Posted: 14 Sep 2025, 09:57
by Anonymous
Warum ist im folgenden Beispiel die Typ Variable t in der Klasse E invariante?

Code: Select all

class C:
pass

class D(C):
pass

class E[T: C = C]:
def g(self, f: Callable[[], T]) -> T:
return f()

x: E = E[D]()  # error
< /code>
Rückgabetypen sind kovariante. Typecks: < /p>
x = E()  # x is E[C]
x.g(D)   # f is Callable[[], D] which fits on Callable[[], C]
Entfernen oder anderweitig ändern Sie den Anruf, um T zu haben, da ein Rückgabetyp T Kovariante erneut macht:

Code: Select all

class E[T: C = C]:
def g(self, f: Callable[[], None]) -> T:
return cast(T, f())  # anything

x: E = E[D]()   # OK
In Anbetracht des ersten Beispiels ist die Begründung für E [D] nicht mit e [c] ?