有没有办法获取函数参数名称,包括不包括`self`的绑定方法?

时间:2016-01-16 17:31:17

标签: python function methods reflection

我可以使用inspect.getargspec来获取任何函数的参数名称,包括绑定方法:

>>> import inspect
>>> class C(object):
...     def f(self, a, b):
...             pass
...
>>> c = C()
>>> inspect.getargspec(c.f)
ArgSpec(args=['self', 'a', 'b'], varargs=None, keywords=None, defaults=None)
>>>

但是,getargspec在参数列表中包含self

是否有通用的方法来获取任何函数的参数列表(最好是任何可调用的函数),如果它是方法,则排除self

编辑:请注意,我想在Python 2和3上都有一个解决方案。

1 个答案:

答案 0 :(得分:0)

inspect.signature排除方法的第一个参数:

>>> from inspect import signature
>>> list(signature(c.f).parameters)
['a', 'b']

您也可以手动删除args的第一个元素:

from inspect import ismethod, getargspec

def exclude_self(func):
    args = getargspec(func)
    if ismethod(func):
        args[0].pop(0)
    return args

exclude_self(c.f) # ArgSpec(args=['a', 'b'], ...)