我正在使用一些带有一些可能参数的命令行实用程序。参数解析是使用argparse模块完成的。最后,通过一些额外的自定义,我得到一个只有一个元素的字典:
{'add_account': ['example.com', 'example']}
其中键是一个应该转换为方法调用的选项,值是参数列表。 我已经实现了所有计划对象方法。 我想知道基于接收字典创建方法调用的最佳,最pythonic方法是什么。 我显然可以通过预定义的映射,如:
if option == 'add_account':
object.add_account(
dictionary['add_account'][0],
dictionary['add_account'][1]
)
我觉得有更好的方法可以做到这一点。
答案 0 :(得分: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')