Windows7,Python2.7 MPD2。
我正在编写一个控制MPD的程序。
MPD有几个(超过50个)不同的功能。
通常情况下,人们会以下列形式打电话:
mpd_client.pause()
#or
mpd_client.playlistmove(playlist_name, old_pos, new_pos)
我想在一个函数中封装所有单独的调用,所以我可以使用一个try / except。
我在想我想使用某种lambda和* args,但我对这两种方法都没什么经验。
在我的程序正文中,我想打电话给这样的话:
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)
但是,这也不起作用。
我不知道。
谢谢,Mark。
答案 0 :(得分:2)
您需要使用getattr()
来检索按名称调用的实际方法:
getattr(mpd_client, required_param)(*args)
(请注意,对于函数调用,您还需要*
前面的args
,将参数列表重新展开为单独的参数。)
答案 1 :(得分:0)
你需要的是对象.__ dict__,就像你的代码一样:
func = mpd_client.__dict__['pause']
func()
func = mpd_client.__dict__['playlistmove']
func(playlist_name, old_pos, new_pos)