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:
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!
Thanks.
You should use
inspect.getargspec
.The
inspect
module allows you to examine a function's arguments. This has been asked a few times on Stack Overflow; try searching for some of those answers. For example:Getting method parameter names in python
You can use:
This won't acknowledge variable-length parameters, like:
inspect.getargspec
is deprecated in Python 3. Consider something like: