Method Delegation To Subinstances

Steve Holden steve at holdenweb.com
Sat May 27 06:34:47 EDT 2006


Cloudthunder wrote:
> In the example:
> 
> class Boo:
>     def __init__(self, parent):
>         self.parent = parent
>         print self.parent.testme
>     def run():
>         print "Yahooooo!"
> 
> class Foo:
>     testme = "I love you!"
>     def __init__(self):
>         test = Boo(self)
> 
> A = Foo()
> 
> 
> How can I set up method delegation so that I can do the following:
> 
> A.run()
> 
> and have this call refer to the run() method within the boo instance? 
> Also, what if I have tons of functions like run() within the boo 
> instance and I want all them to be directly accessible as if they were 
> part of their parent (the Foo instance)?  
> 
The usual way is to provide a __getattr__ method, since this is invoked 
after the usual mechanisms have failed to produce a sought attribute.

class Boo:
     def run(self):
         print "Yahooooo!"
     def identify(self):
     	print repr(self)

class Foo:
     testme = "I love you!"
     def __init__(self):
         self.test = Boo()
     def __getattr__(self, attname):
         return getattr(self.test, attname)

A = Foo()
B = Boo()

B.run()
B.identify()
A.run()
A.identify()

sholden at bigboy ~/Projects/Python
$ python test49.py
Yahooooo!
<__main__.Boo instance at 0x186c002c>
Yahooooo!
<__main__.Boo instance at 0x186b9d4c>

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Love me, love my blog  http://holdenweb.blogspot.com
Recent Ramblings     http://del.icio.us/steve.holden




More information about the Python-list mailing list