计划在 Python 3.17 中移除¶
-
collections.abc.ByteString
计划在 Python 3.17 中移除。要测试
obj
是否在运行时实现了缓冲区协议,请使用isinstance(obj, collections.abc.Buffer)
。在类型注解中,请使用Buffer
或显式指定代码支持的类型的联合类型(例如bytes | bytearray | memoryview
)。ByteString
最初旨在作为一个抽象类,用作bytes
和bytearray
的超类型。然而,由于该 ABC 从未有任何方法,因此知道一个对象是ByteString
的实例实际上从未告诉你有用的关于该对象的信息。其他常见的缓冲区类型,如memoryview
,也从未被理解为ByteString
的子类型(无论是运行时还是通过静态类型检查器)。
-
在 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
最初旨在作为一个抽象类,用作bytes
和bytearray
的超类型。然而,由于该 ABC 从未有任何方法,因此知道一个对象是ByteString
的实例实际上从未告诉你有用的关于该对象的信息。其他常见的缓冲区类型,如memoryview
,也从未被理解为ByteString
的子类型(无论是运行时还是通过静态类型检查器)。