by Anonymous » Today, 09:57
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] ?
Warum ist im folgenden Beispiel die Typ Variable t in der Klasse E invariante?[code]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]
Entfernen oder anderweitig [url=viewtopic.php?t=12045]ändern[/url] Sie den Anruf, um T zu haben, da ein Rückgabetyp T Kovariante erneut macht:
[code]class E[T: C = C]:
def g(self, f: Callable[[], None]) -> T:
return cast(T, f()) # anything
x: E = E[D]() # OK
[/code]
In Anbetracht des ersten Beispiels ist die Begründung für E [D] nicht mit e [c] ?