Cloudthunder wrote: > Sorry, I don't understand, how does this solve my problem? > __getattr__ and __setattr__ allow you to set up dynamic delegation e.g.,
class Foo(object): def __init__(self, **kw): self.__dict__.update(kw) def methFoo(self, x): return "Foo.methFoo(%s,%s)" % (self,x) class Bar(object): def __init__(self, **kw): self.__dict__.update(kw) def methBar(self, x): return "Foo.methFoo(%s,%s)" % (self,x) class MultiDelegate(object): def __init__(self, *args): object.__setattr__(self,"_objects",args) def __getattr__(self, attr): for obj in self._objects: if attr in dir(obj): return getattr(obj, attr) types = ",".join(obj.__class__.__name__ for obj in self._objects) raise AttributeError, "%s object has no attribute '%s'" % (types, attr) def __setattr__(self, attr, value): # but you could do something more useful here too raise TypeError, "Can't set attributes of MultiDelegate" >>> f = Foo(a=1) >>> b = Bar(b=2) >>> m = MultiDelegate(f,b) >>> m.a 1 >>> m.b 2 >>> m.methFoo(1) 'Foo.methFoo(<Untitled1.Foo object at 0x00A2A790>,1)' >>> m.methBar(1) 'Foo.methFoo(<Untitled1.Bar object at 0x00A2A330>,1)' >>> HTH Michael -- http://mail.python.org/mailman/listinfo/python-list