Hi guys,

I have a code that intercepts calls to methods via getattr. Something like:

def __getattr__(self, attr, *fcnargs, **fcnkwargs):
    out=getattr(self._df, attr)(*fcnargs, **fcnkwargs)

My goal is when a user calls a method, if it is not a method of self, the program attempts to run it on one of the objects in my class. Eg if there is no method self.foo(), it runs self.x.foo().

This works fine; however, I just realized that this cannot pass positional arguments into the getattr fcn. For example, if my method requires two positional arguments, call them "foo1, foo2", then I am not able to get the required behavior. Eg, I would need something like:

def __getattr__(self, attr, foo1, foo2 *fcnargs, **fcnkwargs):
    out=getattr(self._df, attr)(foo1, foo2, *fcnargs, **fcnkwargs)

Of course, this behavior is not what I want. I had expected positional arguments to show up in the fcnargs variable, but they seem not to! Can anyone help with this?


This question has already been answered. Start a new discussion instead.