by Guest » 03 Jan 2025, 11:12
Ich versuche, das Folgende (vereinfachtes Beispiel) mit mypy --strict zu übergeben:
Code: Select all
from typing import TypeVar, reveal_type
# Missing type parameters for generic type "list" [type-arg]
F = TypeVar("F", bound="Foo[list]")
U = TypeVar("U")
class Foo[T]:
def __init__(self, value: T) -> None:
self.value = value
def get_value(self) -> T:
return self.value
@classmethod
def join(cls: type[F], foos: list[Foo[U]]) -> F:
return cls([f.value for f in foos])
class Bar[T](Foo[T]):
...
# Correctly revealed as `Bar[list[int]]`
reveal_type(Bar[list[int]].join([Bar(1), Bar(2)]))
was fast funktioniert, aber Mypy Compalins über das nicht spezifizierte Generikum für TypeVar F. Ich kann F = TypeVar("F",bound="Foo[list[T]]") nicht angeben, da dies zur Folge hat, dass die Typvariable „__main__.T“ ungebunden ist. Es scheint auch nicht korrekt zu sein, dass die U TypeVar nur an einer Stelle referenziert wird.
Gibt es eine bessere Möglichkeit, die richtigen Typanmerkungen zu erhalten und gleichzeitig Unterklassen zu unterstützen? Kann der Typ von cls mit denselben TypeVars wie das Argument foos gebunden werden (d. h. die U TypeVar nutzen), ohne dass Bar[list[int]] angegeben werden muss? Code> ?
Ich versuche, das Folgende (vereinfachtes Beispiel) mit mypy --strict zu übergeben:
[code]from typing import TypeVar, reveal_type
# Missing type parameters for generic type "list" [type-arg]
F = TypeVar("F", bound="Foo[list]")
U = TypeVar("U")
class Foo[T]:
def __init__(self, value: T) -> None:
self.value = value
def get_value(self) -> T:
return self.value
@classmethod
def join(cls: type[F], foos: list[Foo[U]]) -> F:
return cls([f.value for f in foos])
class Bar[T](Foo[T]):
...
# Correctly revealed as `Bar[list[int]]`
reveal_type(Bar[list[int]].join([Bar(1), Bar(2)]))
[/code]
was fast funktioniert, aber Mypy Compalins über das nicht spezifizierte Generikum für TypeVar F. Ich kann F = TypeVar("F",bound="Foo[list[T]]") nicht angeben, da dies zur Folge hat, dass die Typvariable „__main__.T“ ungebunden ist. Es scheint auch nicht korrekt zu sein, dass die U TypeVar nur an einer Stelle referenziert wird.
Gibt es eine bessere Möglichkeit, die richtigen Typanmerkungen zu erhalten und gleichzeitig Unterklassen zu unterstützen? Kann der Typ von cls mit denselben TypeVars wie das Argument foos gebunden werden (d. h. die U TypeVar nutzen), ohne dass Bar[list[int]] angegeben werden muss? Code> ?