proxy class and __add__ method

Gabriel Genellina gagsl-py2 at
Thu Jul 31 02:47:06 CEST 2008

En Wed, 30 Jul 2008 07:48:45 -0300, Magnus Schuster  
<magnusschuster at> escribi�:

>> __magic__ methods on new style classes are searched in the class, *not*  
>> in
>> the instance. prx_i+1 looks for __add__ in type(prx_i), that is, in the
>> proxy class.
> With this explanation the behaviour is absolutely clear. Can I find some
> documentation anywhere containing more background information how magic
> functions are resolved? I haven't been successful with the Python  
> Language
> Reference.

There is some documentation collected in and you can see also PEP252 and  

>> Try implementing a similar __getattr__ method in a metaclass.
> I am totally clueless how to do this. Below you find my attempt. Neither
> __getattr__ nor __add__ of the metaclass 'meta' are ever called. May I  
> ask
> you for some more guidance or corrections to the code below?

Unfortunately, as you have noted, my suggestion of using a metaclass with  
__getattr__ doesn't work. That method isn't invoked when resolving those  
I've found this recipe which  
goes step by step: first a Proxy for old-style classes that works fine,  
then a version for new-style classes identical to yours, then a metaclass  
version with __getattr__ that doesn't work either, and finally a working  
version. Very nice example.
Another -more complete- version is at
I hope you can adapt these to match your requirements.

Gabriel Genellina

More information about the Python-list mailing list