argparse:如何调用方法而不是函数?

1 投票
4 回答
1929 浏览
提问于 2025-04-16 09:34

我在我的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

完成了!

撰写回答