Can I reference 1 instance of an object by more names ? rephrase

Maric Michaud maric at aristote.info
Wed May 23 19:21:00 EDT 2007


Stef Mientki a écrit :
> hi Bruno,
> 
> after study it carefully,
> it's much more complex than I thought
> (I can't understand it completely, which is of less importance).
> Your solution works great,
> but I need one little extension,
> which I can create, but just at the cost of a lot of code.
> Maybe you can give me another hint.
> 
>> In the first case, this is *really* a binding, and that's one of the few 
>> things that Python won't let you mess with. In the two last cases, it's 
>> in fact a method call - as the use of __[get|set]item__ should make 
>> obvious.
>>
>> here's an example using a property:
>>
>> class cpu_ports(object):
>>    def __init__(self, value=0):
>>        self._d = value
>>    @apply
>>    def value():
>>        def fset(self, value):
>>            print 'vv'
>>            self._d = value
>>        def fget(self):
>>            return self._d
>>        return property(**locals())
> 
> # I need to read and write the individual bits of the byte object
> # so I can create 8 blocks of code like this, one for each bit position
> # I use it, like this
> #    name1 = cpu_ports()
> #    name1.p5 = True
> # or
> #    name1.p[5] = True
> 
>      @apply   # read / write bit 5
>        def p5():
>          def fset(self, value):
>              index    = 5
>              value    = ( value & 1L ) << index
>              mask     = ( 1L ) << index
>              self._d  = ( self._d & ~mask ) | value
>          def fget(self):
>              index    = 5
>              return ( self._d >> index ) & 1
>          return property(**locals())
> 
> I can optimize the above code a little bit,
> but I've the feeling that I don't need to repeat this code 8 times.

something like that should just work (untested) :

def bit():
     def fset(self, value):
         index    = 5
         value    = ( value & 1L ) << index
         mask     = ( 1L ) << index
         self._d  = ( self._d & ~mask ) | value
     def fget(self):
         index    = 5
         return ( self._d >> index ) & 1
     return property(**locals())


class cpu_ports(object) :

     p1 = bit()
     p2 = bit()
     p3 = bit()
     p4 = bit()
     p5 = bit()

But i wonder if you shouldn't use arrays instead :

In [6]:import array

In [7]:help(array)







More information about the Python-list mailing list