计划在 Python 3.17 中移除

  • collections.abc:

    • collections.abc.ByteString 计划在 Python 3.17 中移除。

      要测试 obj 是否在运行时实现了缓冲区协议,请使用 isinstance(obj, collections.abc.Buffer)。在类型注解中,请使用 Buffer 或显式指定代码支持的类型的联合类型(例如 bytes | bytearray | memoryview)。

      ByteString 最初旨在作为一个抽象类,用作 bytesbytearray 的超类型。然而,由于该 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(),而不是依赖于私有实现细节。

    • typing.ByteString,自 Python 3.9 起已弃用,计划在 Python 3.17 中移除。

      要测试 obj 是否在运行时实现了缓冲区协议,请使用 isinstance(obj, collections.abc.Buffer)。在类型注解中,请使用 Buffer 或显式指定代码支持的类型的联合类型(例如 bytes | bytearray | memoryview)。

      ByteString 最初旨在作为一个抽象类,用作 bytesbytearray 的超类型。然而,由于该 ABC 从未有任何方法,因此知道一个对象是 ByteString 的实例实际上从未告诉你有用的关于该对象的信息。其他常见的缓冲区类型,如 memoryview,也从未被理解为 ByteString 的子类型(无论是运行时还是通过静态类型检查器)。

      有关更多详细信息,请参阅 PEP 688。(由 Shantanu Jain 在 gh-91896 中贡献。)