2016-08-21 46 views
-1

我正在使用具有幾個可能參數的命令行實用程序。參數解析使用argparse模塊完成。最後,有一些額外的定製,我得到一個且只有一個元素的字典:將命令行參數綁定到Python中的對象方法調用

{'add_account': ['example.com', 'example']} 

其中最關鍵的是要轉化爲方法調用和值的參數列表中的一個選項。 我已經實現了所有計劃對象方法。 我不知道什麼是最好的,最pythonic的方式來創建方法調用基於收到的字典。 我能明顯經過一個預定義的映射,如:

if option == 'add_account': 
    object.add_account(
         dictionary['add_account'][0], 
         dictionary['add_account'][1] 
         ) 

我覺得有一個更好的方法來做到這一點,雖然。

+0

化妝'add_account'接受列表中, d只是通過'dictionary ['add_account']' –

+0

或者讓它保持不變,並使用'* dictionary ['add_account']'。 – zondo

回答

0

您可以使用getattr來獲取方法對象(argparse.py多次使用此方法)。

你沒有給我們一個具體的例子,但我猜你有一個這樣的類:

In [387]: class MyClass(object): 
    ...:  def add_account(self,*args): 
    ...:   print(args) 
    ...:   
In [388]: obj=MyClass() 
In [389]: obj.add_account(*['one','two']) 
('one', 'two') 

要做到同樣的事情,從一個字符串,我可以用getattr獲取方法對象:

In [390]: getattr(obj,'add_account') 
Out[390]: <bound method MyClass.add_account of <__main__.MyClass object at 0x98ddaf2c>> 
In [391]: getattr(obj,'add_account')('one') 
('one',) 
與你的字典

現在:

In [392]: dd={'add_account': ['example.com', 'example']} 
In [393]: key='add_account' 
In [394]: getattr(obj, key)(*dd[key]) 
('example.com', 'example') 
相關問題