En Tue, 29 Jul 2008 13:13:51 -0300, Magnus Schuster
<magnusschuster @yahoo.comescri bi�:
__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. Try implementing a similar __getattr__ method in a metaclass.
--
Gabriel Genellina
<magnusschuster @yahoo.comescri bi�:
Hello,
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 )
>
prx_i=proxy(1)
print hasattr(prx_i,' __add__')
j=prx_i.__add__ (1)
k=prx_i+1
--- END ---
>
Actually the "hasattr(prx_i, '__add__')" returns "True" as expected, and
"j=prx_i.__add_ _(1)" sets j=2.
>
But "k=prx_i+1" raises a
<type 'exceptions.Typ eError'>: 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?
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 )
>
prx_i=proxy(1)
print hasattr(prx_i,' __add__')
j=prx_i.__add__ (1)
k=prx_i+1
--- END ---
>
Actually the "hasattr(prx_i, '__add__')" returns "True" as expected, and
"j=prx_i.__add_ _(1)" sets j=2.
>
But "k=prx_i+1" raises a
<type 'exceptions.Typ eError'>: 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?
the instance. prx_i+1 looks for __add__ in type(prx_i), that is, in the
proxy class. Try implementing a similar __getattr__ method in a metaclass.
--
Gabriel Genellina
Comment