Das Typisierungsmodul bietet einige praktische Funktionen, die eine bessere Lesbarkeit und mehr Sicherheit bei der Korrektheit des eingegebenen Codes ermöglichen.Typisierung, benutzerdefinierter Sammlertyp
Eine der besten Eigenschaften ist, dass Sie etwas wie unten schreiben können, um ein Eingabewörterbuch mit bestimmten Elementtypen zu beschreiben.
Jetzt frage ich mich, kann dies zu benutzerdefinierten Typen "erweitert" werden? Können benutzerdefinierte Typen (die wie Container agieren) Indizes auf formale Weise bereitgestellt werden, um einem potenziellen Typprüfer mitzuteilen, dass der Inhalt eines bestimmten Typs sein muss?
Zum Beispiel die collections.Counter
Klasse? - Die obige Einschränkung funktioniert nicht, wenn ich wirklich einen Zähler möchte, da Wörterbücher keinen Additionsoperator bereitstellen, wo Zähler dies tun.
Ich könnte so etwas wie tun:
def myFun(inputDict:collections.Counter): pass
Aber dann verliere ich Informationen darüber, was der Zähler speichert. - Verwenden Sie eine TypeVar
den richtigen Ansatz hier?
CounterTy = typing.TypeVar("CounterTy", collections.Counter)
def myFun(inputDict:CounterTy[str]): pass
Ich bin mir nicht klar, ob Typevar
soll auf diese Weise oder nicht arbeiten. EDIT: nur um klar zu sein, oben Code funktioniert nicht und Fehler auf der TypeVar
Zeile.
Es klingt, als ob Sie nach "typing.Generic" suchen, wenn Sie versuchen, Ihre eigenen Typen zu implementieren. Leider ist 'collections.Counter' überhaupt nicht typisiert, so dass Sie diese Syntax nicht verwenden können. – Blckknght
@Blckknght Danke, aber das verwirrt mich, ich versuchte 'typing.Generic [str]' - aber das gibt zurück "TypeError: Anfangsparameter müssen Typ Variablen sein, bekam" –
paul23