Is there a way to check a function's signature in Python?
我正在寻找一种方法来检查给定函数在Python中使用的参数数量。 目的是实现一种更健壮的方法来修补我的类以进行测试。 所以,我想做这样的事情:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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! |
谢谢。
您可以使用:
1 2 | import inspect len(inspect.getargspec(foo_func)[0]) |
这不会确认可变长度参数,例如:
1 2 | def foo(a, b, *args, **kwargs): pass |
你应该使用
在python中获取方法参数名称
现在不推荐使用inspect.getargspec(至少在Python 3中)。 考虑类似的事情:
1 2 | import inspect len(inspect.signature(foo_func).parameters) |