What is the correct type annotation for "bytes or bytearray"?

Advertisements

In Python 3.11 or newer, is there a more convenient type annotation to use than bytes | bytearray for a function argument that means "An ordered collection of bytes"? It seems wasteful to require constructing a bytes from a bytearray (or the other way around) just to satisfy the type-checker.

Note that the function does not mutate the argument; it’s simply convenient to pass bytes or bytearray instances from different call sites.

e.g.

def serialize_to_stream(stream: MyStream, data: bytes | bytearray) -> None:
    for byte in data:
        stream.accumulate(byte)

(This example is contrived, of course, but the purpose is to show that data is only read, never mutated).

>Solution :

The typing module used to have a type to represent this: ByteString. However, it was deprecated in 3.9.

From the same section:

Prefer collections.abc.Buffer, or a union like bytes | bytearray | memoryview.

Leave a ReplyCancel reply