Python 3.17 で削除予定

  • collections.abc:

    • collections.abc.ByteString は Python 3.17 で削除予定です。

      実行時に obj が バッファプロトコル を実装しているか調べるには、isinstance(obj, collections.abc.Buffer) を使ってください。 型アノテーションには Buffer を使うか、コードが対応する型を明示したユニオン (例えば bytes | bytearray | memoryview) を使ってください。

      ByteString は当初、bytes と bytearray の両方の上位型となる抽象クラスとして意図されていました。 しかし、この ABC はメソッドを一つも持たないため、あるオブジェクトが ByteString のインスタンスだと分かっても、そのオブジェクトに関する有用な情報は何も得られませんでした。 memoryview など、他の一般的なバッファ型も、実行時にも静的型チェッカーによっても ByteString のサブタイプとして認識されることはありませんでした。

      詳しくは PEP 688 を参照してください。 (Shantanu Jain が gh-91896 で貢献しました。)

  • typing:

    • Python 3.14 より前は、従来のユニオンは非公開クラス typing._UnionGenericAlias を使って実装されていました。 このクラスは実装上は不要になりましたが、後方互換性のために残されており、Python 3.17 で削除予定です。 非公開の実装の詳細に依存する代わりに、typing.get_origin() や typing.get_args() など、ドキュメント化されたイントロスペクション用の補助関数を使ってください。

    • Python 3.9 から非推奨となっている typing.ByteString は、Python 3.17 で削除予定です。

      実行時に obj が バッファプロトコル を実装しているか調べるには、isinstance(obj, collections.abc.Buffer) を使ってください。 型アノテーションには Buffer を使うか、コードが対応する型を明示したユニオン (例えば bytes | bytearray | memoryview) を使ってください。

      ByteString は当初、bytes と bytearray の両方の上位型となる抽象クラスとして意図されていました。 しかし、この ABC はメソッドを一つも持たないため、あるオブジェクトが ByteString のインスタンスだと分かっても、そのオブジェクトに関する有用な情報は何も得られませんでした。 memoryview など、他の一般的なバッファ型も、実行時にも静的型チェッカーによっても ByteString のサブタイプとして認識されることはありませんでした。

      詳しくは PEP 688 を参照してください。 (Shantanu Jain が gh-91896 で貢献しました。)