Python间接调用函数

问题描述:

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) 

,但是,这是行不通的两种。

我不知道。

谢谢,马克。

您需要使用getattr()检索实际方法,通过名字来称呼:

getattr(mpd_client, required_param)(*args) 

(请注意,您还需要*args的函数调用前为好,再扩大参数列表返回到独立参数)

+0

谢谢琥珀,这正是我需要的。 –

你需要的是对象.__ dict__,如代码:

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