所以我在python中有一个小脚本,为了帮助我想打印每个方法docstring。例如
~$ myscript.py help update
会将myClass.update.__doc__
打印到屏幕上。我试图运行的代码是:
import sys
class myClass:
def update(self):
""" update method help """
def help(self):
method = sys.argv[2:3][0]
if method == "update":
print "Help: " + self.update.__doc__
myClass = myClass()
myClass.help()
它可以工作,但随着我的方法集合的增长,使帮助按计划进行工作会很麻烦。反正有动态调用类似self.method.__doc__
的东西吗?感谢。
答案 0 :(得分:2)
而不是使用它:
if method == 'update':
help_string = self.update.__doc__
您可以使用更灵活的解决方案:
help_string = getattr(self, method).__doc__
请确保捕获AttributeError
(当没有给定名称的方法时,它将被抛出)。
答案 1 :(得分:1)
这样做:
method = sys.argv[2:3][0] # This is a bit odd; why not sys.argv[2]?
print "Help: " + getattr(self, method).__doc__
答案 2 :(得分:1)
我会使用argparse:
import argparse
import inspect
class myClass(object):
"""description for program"""
def update(self):
"""update method help"""
print 'update command'
def something(self):
"""something command help"""
print 'something command'
if __name__ == '__main__':
program = myClass()
parser = argparse.ArgumentParser(description=program.__doc__)
subparsers = parser.add_subparsers()
for name, method in inspect.getmembers(program, predicate=inspect.ismethod):
subparser = subparsers.add_parser(name, help=method.__doc__)
subparser.set_defaults(method=method)
args = parser.parse_args()
args.method()
命令行上的示例:
$ python ~/test/docargparse.py --help
usage: docargparse.py [-h] {something,update} ...
description for program
positional arguments:
{something,update}
something something command help
update update method help
optional arguments:
-h, --help show this help message and exit
$ python ~/test/docargparse.py
usage: docargparse.py [-h] {something,update} ...
docargparse.py: error: too few arguments
$ python ~/test/docargparse.py update
update command
$ python ~/test/docargparse.py something
something command
答案 3 :(得分:0)
像
这样的东西import inspect
class T:
def test(self):
'''test'''
pass
for t in inspect.getmembers(T, predicate=inspect.ismethod):
print t[1].__doc__
应该很好地扩展。