Transfer undefined class methods to attribute's method.

anton muhin antonmuhin at rambler.ru
Mon Feb 9 09:27:56 EST 2004


Maarten van Reeuwijk wrote:
> Hello,
> 
> Maybe I was a little too detailed in my previous post [same title]. I can
> boil down my problem to this: say I have a class A that I encapsulate with
> a class Proxy. Now I just want to override and add some functionality (see
> my other post why). All functionality not defined in the Proxy class should
> be delegated (I can't use inheritance, see other post). It should be
> possible to achieve this using Python's great introspection possibilities,
> but I can't find out how. Any help would be really appreciated!
> 
> TIA, Maarten
> 
> Example (class A and Proxy): 
> 
> class A:
>     def __init__(self):
>         pass
> 
>     def methodA(self):
>         pass
> 
>     def methodB(self):
>         pass
> 
>     def methodC(self):
>         pass
> 
> class Proxy:
>     def __init__(self):
>         self.a = A()
> 
>         # maybe scan the methods in A and not in this class?????
>         # setup a hook for undefined methods?
> 
>     def methodA(self):
>         # what I DON'T want:
>         return self.a.methodA()
>         # and this for every method...
> 
> 
>     # maybe something like this?
>     def process_unknownmethod(self, method, args):
>         return self.a.method(args)
> 
> P = Proxy()
> P.methodA()
> P.methodC()
> 
> output:
> Traceback (most recent call last):
>   File "group.py", line 36, in ?
>     P.methodC()
> 
> 
> 

This might help (almost untested):

class Proxy(object):
     def __init__(self, obj):
         self.obj_ = obj

     def __getattr__(self, name):
         return getattr(self.obj_, name)

class Foo(object):
     def methodA(self):
         return 'Foo.methodA'

     def methodB(self):
         return 'Foo.methodB'

foo = Foo()
p = Proxy(foo)

print p.methodA()
print p.methodB()

regards,
anton.



More information about the Python-list mailing list