Thema: typing
-
Protocol-Klassen: strukturelle Typisierung für duck-typed Python
Eine typing.Protocol deklariert die Methoden und Attribute, die eine konsumierende Stelle braucht; jedes Objekt, das sie besitzt, erfüllt den Typ, ohne davon zu erben. Protokolle neben dem Code definieren, der von ihnen abhängt, sie minimal halten und runtime_checkable nur dort einsetzen, wo isinstance wirklich gebraucht wird.
-
Iterables versus Iteratoren: das Protokoll hinter for-Schleifen
Ein Iterable liefert über __iter__ einen frischen Iterator zurück; ein Iterator liefert Elemente über __next__, wirft StopIteration, wenn er fertig ist, und muss dabei bleiben. Eine for-Schleife ruft iter einmal und next wiederholt auf, weshalb ein erschöpfter, an eine zweite Schleife übergebener Iterator leer erscheint. Iterable für einen einzelnen Durchlauf annotieren, Sequence oder Collection, wenn mehrere gebraucht werden.
-
Generische Funktionen und Decorators mit TypeVar, ParamSpec und der PEP-695-Syntax
Eine Typvariable verbindet die Typen von Parametern und Rückgabewerten; die PEP-695-Klammern (def f[T](...)) ersetzen manuelle TypeVar-Deklarationen, Bounds und Constraints haben unterschiedliche Semantik, und ParamSpec erlaubt es einem Decorator, die Signatur der umschlossenen Funktion zu erhalten, statt sie zu Callable[..., Any] zu verwässern.
Maschinenlesbar: JSON