計劃在 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
的子型別(無論是執行時還是透過靜態型別檢查器)。