Python - 动态调用具有动态数量参数的方法。反射?

时间:2015-11-06 03:33:32

标签: python function dynamic reflection

假设我想解析一个包含以下行的文本文件:

sampleMethod 
sampleParameter
sampleParameter2

其中sampleMethod是方法的字符串,样本参数可以是任何类型的值。

我知道我可以使用getattr来动态调用我们知道模块和方法名称的内容:

output = getattr(componentName, sampleMethod)(sampleParameter)

但如果我们动态发现多个参数,我怎么能这样做呢?

例如,如果文本文件有:

sampleMethod 
sampleParameter
sampleParameter2
sampleParameter3

我们怎样才能动态地做这样的事?

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

2 个答案:

答案 0 :(得分:0)

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

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

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

请注意,如果您确定parameterList不会大于sampleMethod的参数数量,则不必使用arbitrary argument lists(否则您可能会收到运行时错误)

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

答案 1 :(得分:0)

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

def print_for(*args):
    print args

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