2014-03-28 22 views
-1

我有功能的合奏:FUNC1,FUNC2,FUNC3,... funcN。基於用戶輸入將僅使用1個功能,例如,如果用戶放置'1',則只會使用func1。到目前爲止,我所做的是將這些功能放在一個分支中:來選擇特定功能的最有效的方法基於輸入

class FunctionEnsembles: 
    def __init__(self,select_funcion): 
     self.function_to_select=select_function 
    def function_to_use(self): 
     if self.function_to_select=='1': 
      func1... 
     elif self.function_to_select=='2': 
      func2... 
     ... 

顯然這不是有效的。當類被實例化時,例如FunctionEnsemble myfunc('1'),定義了所有的函數。如果調用myfunc.function_to_use,它將遍歷所有分支,這是不可取的。我想要做的是: 功能被選中,類FunctionEnsemble實例化,而不需要的功能沒有被觸及。

如何有效實現這一目標?非常感謝。

回答

1

Python函數是一流的對象;你可以把它們放在一個列表:

functions = [None, func1, func2, func3, ...] 
functions[int(self.function_to_select)]() 

或在詞典:

functions = { 
    'selection1': func1, 
    'selection2': func2, 
    'selection3': func3, 
} 

functions[self.function_to_select]() 

列出工作的偉大,如果你的function_to_select變量是真正的序列號碼,字典是偉大的任何其他事物可哈希(如字符串)。

+0

謝謝,字典的方法是有前途的。但我不認爲我可以把這個字典放在__init __(...)函數中。我猜我必須把這個字典放在function_to_use(self)下面? – Void

+0

@Void:這些全局函數或綁定方法是否在'self'上? –

+0

@Void:對於全局函數,我會創建一個全局字典。對於方法,我會在'__init__'中創建字典,所以我可以訪問'self'來獲取綁定方法,然後將該字典存儲在'self'中。 –

相關問題