Is there a way to print a short version of docstring for all members of a Python object?

In Python, dir() returns a list of names in the current local scope. __doc__ returns the full docstring of the object.

How can I list all the names in the current local area and print the first line of each docstring line?

To clarify: for import numpy as np I would like to get a list of short descriptions of all the names returned by dir(np) , for example. print(np.nonzero.__doc__.split('.', 1)[0]) .

How can i do this?

+7
python methods oop metaprogramming docstring
source share
2 answers
 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)) 
+5
source share

I used something like this. This is similar, but not quite what you are looking for. You can customize the docstring output to suit your needs.

 ############################################################################### 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" 
0
source share

All Articles