title: How to use joblib.Memory of cache the output of a member function of a Python Class
body: <p>I would like to cache the output of a member function of a class using <code>joblib.Memory</code> library. Here is a sample code:</p>
  
  <pre><code>import joblib
  import numpy as np
  
  mem = joblib.Memory(cachedir='/tmp', verbose=1)
  
  
  @mem.cache
  def my_sum(x):
      return np.sum(x)
  
  
  class TestClass(object):
      def __init__(self):
          pass
  
      @mem.cache
      def my_sum(self, x):
          return np.sum(x)
  
  
  if __name__ == '__main__':
      x = np.array([1, 2, 3, 4])
      a = TestClass()
      print a.my_sum(x)  # does not work
      print my_sum(x) # works fine
  </code></pre>
  
  <p>However, I get the following error:</p>
  
  <pre><code>/nfs/sw/anaconda2/lib/python2.7/site-packages/joblib/memory.pyc in _get_output_dir(self, *args, **kwargs)
      512             of the function called with the given arguments.
      513         """
  --&gt; 514         argument_hash = self._get_argument_hash(*args, **kwargs)
      515         output_dir = os.path.join(self._get_func_dir(self.func),
      516                                   argument_hash)
  
  /nfs/sw/anaconda2/lib/python2.7/site-packages/joblib/memory.pyc in _get_argument_hash(self, *args, **kwargs)
      505     def _get_argument_hash(self, *args, **kwargs):
      506         return hashing.hash(filter_args(self.func, self.ignore,
  --&gt; 507                                          args, kwargs),
      508                              coerce_mmap=(self.mmap_mode is not None))
      509 
  
  /nfs/sw/anaconda2/lib/python2.7/site-packages/joblib/func_inspect.pyc in filter_args(func, ignore_lst, args, kwargs)
      228                            repr(args)[1:-1],
      229                            ', '.join('%s=%s' % (k, v)
  --&gt; 230                                     for k, v in kwargs.items())
      231                            )
      232                         )
  
  ValueError: Wrong number of arguments for my_sum(self, x):
       my_sum(array([1, 2, 3, 4]), ) was called.
  </code></pre>
  
  <p>Is there a way to cache a member function of a class using Memory or any other decorators?</p>