if hasattr(self.child, attr):

    def wrapper(*args, **kw):
        print('called with %r and %r' % (args, kw))
return getattr(self.child, attr)(*args, **kw)
return wrapper
raise AttributeError(attr)
Как аргументы передаются функции через __getattr__