[Python-Dev] Pre-PEP: The "bytes" object
Neil Schemenauer
nas at arctrix.com
Wed Feb 22 22:28:44 CET 2006
On Thu, Feb 16, 2006 at 12:47:22PM -0800, Guido van Rossum wrote:
> BTW, for folks who want to experiment, it's quite simple to create a
> working bytes implementation by inheriting from array.array. Here's a
> quick draft (which only takes str instance arguments):
Here's a more complete prototype. Also, I checked in the PEP as
#358 after making changes suggested by Guido.
Neil
import sys
from array import array
import re
import binascii
class bytes(array):
__slots__ = []
def __new__(cls, initialiser=None, encoding=None):
b = array.__new__(cls, "B")
if isinstance(initialiser, basestring):
if isinstance(initialiser, unicode):
if encoding is None:
encoding = sys.getdefaultencoding()
initialiser = initialiser.encode(encoding)
initialiser = [ord(c) for c in initialiser]
elif encoding is not None:
raise TypeError("explicit encoding invalid for non-string "
"initialiser")
b.extend(initialiser)
return b
@classmethod
def fromhex(self, data):
data = re.sub(r'\s+', '', data)
return bytes(binascii.unhexlify(data))
def __str__(self):
return self.tostring()
def __repr__(self):
return "bytes(%r)" % self.tolist()
def __add__(self, other):
if isinstance(other, array):
return bytes(super(bytes, self).__add__(other))
return NotImplemented
def __mul__(self, n):
return bytes(super(bytes, self).__mul__(n))
__rmul__ = __mul__
def __getslice__(self, i, j):
return bytes(super(bytes, self).__getslice__(i, j))
def hex(self):
return binascii.hexlify((self.tostring()))
def decode(self, encoding):
return self.tostring().decode(encoding)
More information about the Python-Dev
mailing list