Wie können die TypeVars für Self in der Klassenmethode einer generischen Klasse genutzt werden?Python

Python-Programme
Guest
 Wie können die TypeVars für Self in der Klassenmethode einer generischen Klasse genutzt werden?

Post by Guest »

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> ?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post