Python-使用动态数量的参数动态调用方法.反射



假设我想解析一个有行的文本文件:

sampleMethod 
sampleParameter
sampleParameter2

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

我知道我可以使用getattr动态调用一些东西,因为我们知道模块和方法的名称:

output = getattr(componentName, sampleMethod)(sampleParameter)

但是如果有多个参数是我们动态发现的,我该怎么做呢?

例如,如果文本文件具有:

sampleMethod 
sampleParameter
sampleParameter2
sampleParameter3

我们如何动态地做这样的事情?

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

您可以解压缩参数列表(特殊的*):

# you could dynamically build the list 
parameterList = [sampleParameter, sampleParameter2, sampleParameter3]
# then pass as parameter
output = getattr(componentName, sampleMethod)(*parameterList)

请注意,如果您确信parameterList不会大于sampleMethod的参数数量,则不必使用任意参数列表(否则可能会出现运行时错误)。

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

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

def print_for(*args):
    print args
print_for(1,2,3)
print_for(1,2,3,4)
from importlib.machinery import SourceFileLoader
inputParams = ["1st_param", "2nd_param", ....]
module=SourceFileLoader("module_name","absolute/path/to/pyfile").load_module()
method = getattr(module, "functionname")
result = method(*inputParams)
print(result)

相关内容

  • 没有找到相关文章

最新更新