Partially apply a function by creating a version that has had some of
        its arguments pre-filled, without changing its dynamic `this` context.

def partial(self, *args):
        """
        Partially apply a function by creating a version that has had some of
        its arguments pre-filled, without changing its dynamic `this` context.
        """
        def part(*args2):
            args3 = args + args2
            return self.obj(*args3)

        return self._wrap(part)