changing value of 'self' when subclassing int

David Coffin dcoffin at gmail.com
Mon Feb 20 11:46:34 EST 2006


I'd like to subclass int to support list access, treating the integer  
as if it were a list of bits.
Assigning bits to particular indices involves changing the value of  
the integer itself, but changing 'self' obviously just alters the  
value of that local variable.
Is there some way for me to change the value of the BitSequence  
object itself? I've also tried wrapping and delegating using  
__getattr__, but I couldn't figure out how to handle in-place methods.

Thanks for your help,
David Coffin


class BitSequence(int):
     """An integer emulating a sequence of bits, subclassing int."""
     def __new__(cls, value, length=32):
         inst = super(BitSequence,cls).__new__(cls, value)
         inst.length = length
         return inst

     def __setitem__(self, index, bit):
         mask = 1 << self.length - index - 1
         if bit == 1:
             # XXX only changing local 'self'
             self |= mask
         elif bit == 0:
             self &= ~mask

     def __getitem__(self, i):
         return (self >> (self.length - i -1)) & 1

     def __repr__(self):
         s = ''
         for i in xrange(self.length):
             s = str(self >> i & 1) + s
         return s + " : " + str(self)



More information about the Python-list mailing list