argparse:如何调用方法而不是函数?
我在我的Python程序中使用argparse,想要在运行软件时调用一个方法,就像这样:
$ python __init__.py foo
如果我想调用一个函数,那就简单多了:
def foo(args):
pass
def main():
foo_parser.set_defaults(func=foo)
if __name__ == "__main__":
main()
我该怎么把“func=foo”换成“func=MyClass.my_method”呢?
4 个回答
1
你是在找像这样的东西吗:
import argparse
class Myclass(object):
def foo(self):
print 'foo'
def bar(self):
print 'bar'
class Main(Myclass):
def __init__(self):
foo_parser = argparse.ArgumentParser()
foo_parser.add_argument('method')
self.args = foo_parser.parse_args()
def __call__(self, *args, **kws):
method = self.args.method
return getattr(self, method)(*args, **kws)
if __name__ == "__main__":
main = Main()
main()
使用示例:
$ python test.py foo
'foo'
$ python test.py bar
'bar'
1
你自己已经给出了正确的答案。只需要把:
func = Your_Class.your_method
换成:
func = foo
5
你只需要提到方法,而不是函数。没错,就是这么简单。你可以这样做:
func = foo
你这样做:
func = theobject.foo
完成了!