有没有办法为Python对象的所有成员打印文档字符串的简短版本?

时间:2017-08-21 12:46:46

标签: python oop methods metaprogramming docstring

在Python dir()中返回当前本地范围内的名称列表。 __doc__返回对象的完整文档字符串。

如何列出当前本地范围内的所有名称并打印每个项目的文档字符串的第一行?

详细说明:对于import numpy as np,我想获得dir(np)返回的所有姓名的简短说明列表,例如: print(np.nonzero.__doc__.split('.', 1)[0])

我该怎么做?

2 个答案:

答案 0 :(得分:5)

def print_members(obj):
    for key in dir(obj):
        value = getattr(obj, key)
        doc = (value.__doc__ or '').split('.', 1)[0]
        print('MEMBER: %s\nDOCSTRING: %s\n\n' % (key, doc))

答案 1 :(得分:0)

我使用过类似的东西。它与您的相似但不完全相同。您可以根据需要调整文档字符串输出。

###############################################################################
def about(obj=None, text=None, capsOnly=False, noLeadingUnderScores=False):
    """
    Utility function to assist with discovery while playing in the Python
    shell.  When possible, returns the sorted dir() and values() of the
    specified object.

    * noLeadingUnderScores - toggles display filtering of items that have a
                             leading underscore; only applies to dir() not
                             values() items.

    * capsOnly - toggles display filtering of items that are uppercase only.
                 this only applies to dir() not values() items.

    * text -     toggles the display filtering of items that have 'text'
                 within their string; applies to both dir() and values() items.
    """

    print "\n*******************\n*  print __obj__  *\n*******************\n"
    if obj is None:
        print "about() is meaningless as 'obj' is None"
    else:
        # diplay help(), if possible
        try:
            if obj.__doc__:
                print "\n\n********************\n*  HELP() results  *\n********************\n"
                for x in obj.__doc__.split('\n'):
                        print x
        except:
            print "\nno __obj__ available"


        # display dir(), if possible
        print "\n\n*******************\n*  DIR() results  *\n*******************\n"
        for x in sorted(dir(obj)):
            temp = "%s" % x
            if noLeadingUnderScores and len(temp) > 0 and temp[0] == "_":
                continue
            elif capsOnly:
                if temp == temp.upper():
                    if text and text in temp:
                        print temp
                else:
                    continue
            elif text:
                if text in temp:
                    print temp
            else:
                print temp

        # display values(), is possible
        try:
            if obj.values and type(obj.values) == type({}):
                print "\n\n**********************\n*  DICT values(k,v)  *\n**********************\n"
                for x in sorted(obj.values.keys()):
                    if text:
                        if text in x or text in str(obj.values[x]):
                            print x, obj.values[x]
                    else:
                        print x, obj.values[x] 
        except:
            print "\nno dictionary like obj.values available"