proxy class and __add__ method

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Thu Jul 31 03:13:49 CEST 2008


En Wed, 30 Jul 2008 14:54:51 -0300, Rhamphoryncus <rhamph at gmail.com>  
escribió:

> On Jul 29, 10:23 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
> wrote:
>> En Tue, 29 Jul 2008 13:13:51 -0300, Magnus Schuster  
>> <magnusschus... at yahoo.com> escribi :
>>
>> > I have written the following small proxy class which I expect to pass  
>> all
>> > function calls to the 'original' object:
>>
>> > --- BEGIN ---
>> > class proxy(object):
>> >     def __init__( self, subject ):
>> >         self.__subject = subject
>> >     def __getattr__( self, name ):
>> >         return getattr( self.__subject, name )
>>
>> > But "k=prx_i+1" raises a
>> > <type 'exceptions.TypeError'>: unsupported operand type(s) for +:  
>> 'proxy'
>> > and 'int'.
>>
>> > How is this addition different from the previous line "j=..."? And
>>> how  
>>> can I
>>> modify the proxy class so that all methods are passed on, which are not
>>> explicitly overloaded?
>>
>> Try implementing a similar __getattr__ method in a metaclass.
>
> But I don't think they use __getattr__.. they bypass it.  Effectively
> they catch the assignment to __add__ and cache it.  You'll have to
> always define it in the class and have it be ineffectual in some cases.

Ouch, yes, thanks, I noticed the fact after some testing.

-- 
Gabriel Genellina




More information about the Python-list mailing list