title: Is there a way to check a function's signature in Python?
body: <p>I'm looking for a way to check the number of arguments that a given function takes in Python.  The purpose is to achieve a more robust method of patching my classes for tests.  So, I want to do something like this:</p>
  
  <pre><code>class MyClass (object):
      def my_function(self, arg1, arg2):
          result = ... # Something complicated
          return result
  
  def patch(object, func_name, replacement_func):
      import new
  
      orig_func = getattr(object, func_name)
      replacement_func = new.instancemethod(replacement_func, 
                             object, object.__class__)
  
      # ...
      # Verify that orig_func and replacement_func have the 
      # same signature.  If not, raise an error.
      # ...
  
      setattr(object, func_name, replacement_func)
  
  my_patched_object = MyClass()
  patch(my_patched_object, "my_function", lambda self, arg1: "dummy result")
  # The above line should raise an error!
  </code></pre>
  
  <p>Thanks.</p>