class D(object): def __init__ ( self, cls ): self.proxied = cls def __call__ ( self, *args, **kwargs ): return self.wrapper(self.proxied, *args, **kwargs) class wrapper ( object ): def __init__ ( self, cls, *args, **kwargs ): self.proxied = cls(*args, **kwargs) def __getattr__ ( self, name ): return getattr(self.proxied, name) def foo ( self ): print 'asplode' return def m ( self ): self.proxied.m() print 'goodbye' return