# Python 3.17 中待移除的項目

- `collections.abc`：

  - `collections.abc.ByteString` 預計在 Python 3.17 中移除。

    使用 `isinstance(obj, collections.abc.Buffer)` 來測試 `obj` 是否在 runtime 實作了緩衝區協定。在型別註解的使用中，請用 `Buffer` 或明確指定你的程式碼所支援型別的聯集（例如 `bytes | bytearray | memoryview`）。

    `ByteString` 最初被設計為一個抽象類別，以作為 `bytes` 和 `bytearray` 的超型別 (supertype)。然而由於 ABC 從未擁有任何方法，知道一個物件是 `ByteString` 的實例從未真正告訴你任何關於該物件的有用資訊。其他常見的緩衝區型別如 `memoryview` 也從未被理解為 `ByteString` 的子型別（無論是在 runtime 還是由靜態型別檢查器）。

    更多細節請見 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 中移除。

    使用 `isinstance(obj, collections.abc.Buffer)` 來測試 `obj` 是否在 runtime 實作了緩衝區協定。在型別註解的使用中，請用 `Buffer` 或明確指定你的程式碼所支援型別的聯集（例如 `bytes | bytearray | memoryview`）。

    `ByteString` 最初被設計為一個抽象類別，以作為 `bytes` 和 `bytearray` 的超型別 (supertype)。然而由於 ABC 從未擁有任何方法，知道一個物件是 `ByteString` 的實例從未真正告訴你任何關於該物件的有用資訊。其他常見的緩衝區型別如 `memoryview` 也從未被理解為 `ByteString` 的子型別（無論是在 runtime 還是由靜態型別檢查器）。

    更多細節請見 PEP 688。（由 Shantanu Jain 於 gh-91896 貢獻。）