Zur Entfernung vorgesehen in Python 3.17

  • collections.abc:

    • collections.abc.ByteString ist für die Entfernung in Python 3.17 geplant.

      Verwenden Sie isinstance(obj, collections.abc.Buffer), um zur Laufzeit zu testen, ob obj das Buffer-Protokoll implementiert. Für die Verwendung in Typ-Annotationen verwenden Sie entweder Buffer oder eine Union, die explizit die von Ihrem Code unterstützten Typen angibt (z. B. bytes | bytearray | memoryview).

      ByteString war ursprünglich als abstrakte Klasse gedacht, die als Obertyp sowohl für bytes als auch für bytearray dienen sollte. Da die ABC jedoch nie Methoden hatte, wusste man, dass ein Objekt eine Instanz von ByteString war, aber das sagte nie wirklich etwas Nützliches über das Objekt aus. Andere gängige Puffertypen wie memoryview wurden ebenfalls nie als Untertypen von ByteString verstanden (weder zur Laufzeit noch von statischen Typenprüfern).

      Weitere Einzelheiten finden Sie in PEP 688. (Beigesteuert von Shantanu Jain in gh-91896.)

  • typing:

    • Vor Python 3.14 wurden alte Unions mit der privaten Klasse typing._UnionGenericAlias implementiert. Diese Klasse wird für die Implementierung nicht mehr benötigt, wurde aber zur Abwärtskompatibilität beibehalten und soll spätestens in Python 3.17 entfernt werden. Benutzer sollten dokumentierte Introspektionshilfen wie typing.get_origin() und typing.get_args() verwenden, anstatt sich auf private Implementierungsdetails zu verlassen.

    • typing.ByteString, das seit Python 3.9 veraltet ist, ist für die Entfernung in Python 3.17 geplant.

      Verwenden Sie isinstance(obj, collections.abc.Buffer), um zur Laufzeit zu testen, ob obj das Buffer-Protokoll implementiert. Für die Verwendung in Typ-Annotationen verwenden Sie entweder Buffer oder eine Union, die explizit die von Ihrem Code unterstützten Typen angibt (z. B. bytes | bytearray | memoryview).

      ByteString war ursprünglich als abstrakte Klasse gedacht, die als Obertyp sowohl für bytes als auch für bytearray dienen sollte. Da die ABC jedoch nie Methoden hatte, wusste man, dass ein Objekt eine Instanz von ByteString war, aber das sagte nie wirklich etwas Nützliches über das Objekt aus. Andere gängige Puffertypen wie memoryview wurden ebenfalls nie als Untertypen von ByteString verstanden (weder zur Laufzeit noch von statischen Typenprüfern).

      Weitere Einzelheiten finden Sie in PEP 688. (Beigesteuert von Shantanu Jain in gh-91896.)