title: Usage of functool.partialmethod and functool.partial?
body: <p>Consider the following code:</p>
  
  <pre><code>import functools
  import inspect
  
  class Foo:
      def foo_fn(self, hello, world):
          print(hello, world)
  
  class FooWrapper:
      def __init__(self, foo_class):
          self._foo = foo_class()
          for key, value in inspect.getmembers(self._foo):
              if inspect.ismethod(value):
                  bound_fn = functools.partial(self.foo_wrapper_fn, self, value)
                  setattr(self._foo, key, bound_fn)
  
      def foo_wrapper_fn(self_wrapper, self_foo, bound_method, hello, world):
          bound_method(hello, world)
  
  def make_foo(Foo):
      wrapper = FooWrapper(Foo)
      return wrapper._foo
  a = make_foo(Foo)
  a.foo_fn("hello", "world")
  </code></pre>
  
  <ol>
  <li><p>How does this ordering of the function <code>foo_wrapper_fn()</code> parameters like <code>(self_wrapper, self_foo, bound_method, hello, world)</code> come to be?
  and not like so: <code>self_wrapper, bound_fn, self_foo, hello, world</code>, since <code>self_wrapper</code> and <code>bound_fn</code> were partially bound first? </p></li>
  <li><p>Is it ok for the return of <code>functool.partial</code> <em>(and not <code>functool.partialmethod</code>)</em> to be called by an object (<code>a.foo_fn</code>)?</p></li>
  <li><p>If I replace it with <code>functools.partialmethod(self.foo_wrapper_fn, self, value)</code>  why does this error come up?</p>
  
  <pre><code>TypeError: 'partialmethod' object is not callable
  </code></pre></li>
  </ol>