◐ Shell
clean mode source ↗

Message 282173 - Python tracker

Noting for the record, as the general way of querying an unbound method for the name of the first parameter and adding it to the bound arguments:

    def add_instance_arg(callable, bound_args):
        try:
            self = callable.__self__
            func = callable.__func__
        except AttributeError:
            return # Not a bound method
        unbound_sig = inspect.signature(func)
        for name in unbound_sig.parameters:
            bound_args.arguments[name] = self
            break

>>> method = C().method
>>> sig = inspect.signature(method)
>>> sig
<Signature (arg)>
>>> args = sig.bind(1)
>>> args
<BoundArguments (arg=1)>
>>> add_instance_arg(method, args)
>>> args
<BoundArguments (arg=1, self=<__main__.C object at 0x7f07ab719668>)>