Python generische Typevar, die an die generische Basisklasse gebunden istPython

Python-Programme
Anonymous
 Python generische Typevar, die an die generische Basisklasse gebunden ist

Post by Anonymous »

Sag, ich habe eine python -abstrakte Klasse in der Form: < /p>

Code: Select all

class AbcClass(ABC, Generic[T]): ...
< /code>
mit einigen Implementierungen: < /p>
class IntClass(AbcClass[int]): ...
class StrClass(AbcClass[str]): ...
class FloatClass(AbcClass[float]): ...
Dann möchte ich eine Funktion foo haben, die in einer Instanz einer der Unterklassen und eines Werts, der mit der Art der Generika dieser Unterklasse entspricht, einnimmt. Zum Beispiel: < /p>

Code: Select all

def foo(obj: IntClass, value: int) -> None: ...
def foo(obj: StrClass, value: str) -> None: ...
def foo(obj: FloatClass, value: float) -> None: ...
Ich versuche, einen Dekorateur für Foo zu erstellen und möchte die Methodensignatur korrekt eingeben. Was ist der richtige Weg, um die Funktion foo mit einem Callable einzugeben? Im Moment mache ich: < /p>

Code: Select all

T = TypeVar("T", bound=AbcClass)
V = TypeVar("V")
FooFn = Callable[[T, V], None]
ist jedoch im obigen Code V nicht mit T in Bezug Wert. Wie kann ich das beheben? Die Verwendung der folgenden Verwendung ist nicht möglich, da ABCCASS nicht kovarant ist und ich auch in der Lage sein möchte, eine Unterklasse (z. B.: intclass ) einzugeben.

Code: Select all

FooFn = Callable[[AbcClass[V], V]

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post