計劃在 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 中貢獻。)