如果我们只在字符串类型中使用方法名称,有没有方法可以获取方法所使用的参数数



首先,我使用的是python 2.7.13,所以我的选择非常有限。我试过了:

@some_decorator
def xyz(self,a,b,c):
pass
function_name = " xyz"    
inspect.getargspec(getattr(self,function_name))

它给出:

ArgSpec(args=[], varargs='args', keywords='kwargs', defaults=None)

由于decorator的原因,它给出了0个参数。如果我尝试其他方法,它会给出正确的参数列表。

其中一个解决方案可以使用ast模块:

import ast    
def GetAllMethodsArgs(self):
with open(os.path.abspath(__file__)) as file:
node = ast.parse(file.read())
classDefinitions = [n for n in node.body if isinstance(n, ast.ClassDef)]
for classDef in classDefinitions:
functions = [n for n in classDef.body if isinstance(n, ast.FunctionDef)]
for function in functions:
self.methodArgsdict[function.name] = len(function.args.args)

在定义methodArgsdict={}之后,在类的init中调用此函数。此函数将在字典中填充函数名称作为关键字,并将参数作为其值。

最新更新