Geben Sie die Invarianz in generischer Klasse ein, wenn Callable beteiligt ist
Posted: 14 Sep 2025, 09:57
Warum ist im folgenden Beispiel die Typ Variable t in der Klasse E invariante?
Entfernen oder anderweitig ändern Sie den Anruf, um T zu haben, da ein Rückgabetyp T Kovariante erneut macht:
In Anbetracht des ersten Beispiels ist die Begründung für E [D] nicht mit e [c] ?
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]
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