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
的函数调用前为好,再扩大参数列表返回到独立参数)
答
你需要的是对象.__ dict__,如代码:
func = mpd_client.__dict__['pause']
func()
func = mpd_client.__dict__['playlistmove']
func(playlist_name, old_pos, new_pos)
谢谢琥珀,这正是我需要的。 –