>__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.

>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?

Regards,
Magnus

2nd attempt:
--- BEGIN ---
class meta(type):
    def __getattr__( self, name ):
        print "meta.__getattr__"
        return getattr( self.__subject, name )
    def __add__( self, y ):
        print "meta.__add__"
        return self+y

class proxy(object):
    __metaclass__=meta;
    def __init__( self, subject ):
        self.__subject = subject
    def __getattr__( self, name ):
        print "proxy.__getattr__"
        return getattr( self.__subject, name )

prx_i=proxy(1)
k=prx_i+1
--- END ---

The error is the same as before. Please note that I want to avoid
reimplementing all methods of 'int', because the proxy class should be
universal. (The meta.__add__ method is for testing only).

-- 
View this message in context: 
http://www.nabble.com/proxy-class-and-__add__-method-tp18715799p18730676.html
Sent from the Python - python-list mailing list archive at Nabble.com.

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to