2016-12-20 82 views
0

Windows7,Python2.7 MPD2。Python間接調用函數

我在寫程序來控制MPD。

MPD有幾個(超過50)不同的功能。

通常人會打個電話形式:

mpd_client.pause() 
#or 
mpd_client.playlistmove(playlist_name, old_pos, new_pos) 

我想封裝在一個函數中的所有單獨調用,所以我可以用一個try /除外。

我想我想使用某種拉姆達,*參數,但我沒有經驗與這兩者之一。

在我的程序的身體,我想打電話給這樣的事情:

MPD('pause') 
#or 
MPD('playlistmove', playlist_name, old_pos, new_pos) 

我想象我的功能看起來像......

def MPD(required_param, *args): 
    try: 
     mpd_client.required_param(args) 
    except: 
     ... 
當然

,這不加工。

寫一個巨大的switch語句和50個不同的try結構的缺點,有沒有辦法可以使用lambda?

也許是這樣的:

lambda m=mpd_client.required_param: m(args) 

,但是,這是行不通的兩種。

我不知道。

謝謝,馬克。

回答

2

您需要使用getattr()檢索實際方法,通過名字來稱呼:

getattr(mpd_client, required_param)(*args) 

(請注意,您還需要*args的函數調用前爲好,再擴大參數列表返回到獨立參數)

+0

謝謝琥珀,這正是我需要的。 –

0

你需要的是對象.__ dict__,如代碼:

func = mpd_client.__dict__['pause'] 
func() 
func = mpd_client.__dict__['playlistmove'] 
func(playlist_name, old_pos, new_pos)