On 05.01.17 22:37, Alexander Belopolsky wrote:
I propose the following:

1. For 3.6, restore and document 3.5 behavior.  Recommend that 3rd party
types that are both integer-like and buffer-like implement their own
__bytes__ method to resolve the bytes(x) ambiguity.

The __bytes__ method is used only by the bytes constructor, not by the bytearray constructor.

2. For 3.7, I would like to see a drastically simplified bytes(x):
2.1.  Accept only objects with a __bytes__ method or a sequence of ints
in range(256).
2.2.  Expand __bytes__ definition to accept optional encoding and errors
parameters.  Implement str.__bytes__(self, [encoding[, errors]]).

I think it is better to use the encode() method if you want to encode from non-strings.

2.3.  Implement new specialized bytes.fromsize and bytes.frombuffer
constructors as per PEP 467 and Inada Naoki proposals.

bytes.fromsize(n) is just b'\0'*n. I don't think this method is needed.

bytes.frombuffer(x) is bytes(memoryview(x)) or memoryview(x).tobytes().

2.4. Implement memoryview.__bytes__ method so that bytes(memoryview(x))
works ad before.
2.5.  Implement a fast bytearray.__bytes__ method.

This wouldn't help for the bytearray constructor. And wouldn't allow to avoid double copying in the constructor of bytes subclass.

3. Consider promoting __bytes__ to a tp_bytes type slot.

The buffer protocol is more general than the __bytes__ method. It allows to avoid redundant memory copying in constructors of many types (bytes, bytearray, array.array, etc), not just bytes.


_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to