如何使用下面的代码进行功能测试,在foo和bar上工作正常。
import argparse
class Myclass(object):
def foo(self):
print 'foo'
def bar(self):
print 'bar'
def test(self,name,place):
print name, place
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()发布于 2013-06-29 06:09:13
我得到的解决方案如下:
def __init__(self):
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
for name in dir(self):
if not name.startswith("_"):
p = subparsers.add_parser(name)
method = getattr(self, name)
argnames = inspect.getargspec(method).args[1:]
for argname in argnames:
p.add_argument(argname)
p.set_defaults(func=method, argnames=argnames)
self.args = parser.parse_args()
def __call__(self):
a = self.args
callargs = [getattr(a, name) for name in a.argnames]
return self.args.func(*callargs)发布于 2013-05-06 22:25:06
test需要参数。您没有向main()调用传递任何参数,因此没有任何参数可以传递给__call__()
您可能想要向__init__()添加类似以下内容的内容
parser.add_argument('arguments', nargs=argparse.REMAINDER)然后将main.args.arguments传递回动态调用。
https://stackoverflow.com/questions/16400563
复制相似问题