2015-11-06 114 views
0

说我想分析具有线的文本文件:Python - 动态调用具有动态数量参数的方法。反射?

sampleMethod 
sampleParameter 
sampleParameter2 

其中sampleMethod是一种方法的一个字符串和样品参数可以是任何类型的值。

我知道我可以使用GETATTR动态调用的东西givn我们知道模块和方法名称:

output = getattr(componentName, sampleMethod)(sampleParameter) 

,但我怎么能做到这一点,如果有我们动态地发现多个参数?

因此,例如,如果文本文件有:

sampleMethod 
sampleParameter 
sampleParameter2 
sampleParameter3 

,我们该怎么办成才这样的动态?

output = getattr(componentName, sampleMethod)(sampleParameter, sampleParameter2, sampleParameter3) 

回答

0

你可以unpack您的参数列表(特殊*):

# you could dynamically build the list 
parameterList = [sampleParameter, sampleParameter2, sampleParameter3] 

# then pass as parameter 
output = getattr(componentName, sampleMethod)(*parameterList) 

注意,您不必使用arbitrary argument lists如果你确信parameterList不会比参数的数量更大sampleMethod(否则你可以得到一个运行时错误)。

如果您不确定,您仍可以先切片清单或使用任意参数列表。

0

您可以在函数定义的属性中使用*。它会将所有未匹配到元组中的参数对待。例如:

def print_for(*args): 
    print args 

print_for(1,2,3) 
print_for(1,2,3,4)