2015-11-06 85 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)