# Updated by John Brearley Oct 2017 import re ;# regular expressions need importing. # Define version & author attributes for this package. __version__ = '1.0' __author__ = 'John Brearley ' # Prints an objects available methods, attribute names & values. # NB: inspect.ismethod(item) always returns false. # NB: Option verbose flag v defaults to False. def print_data(obj,v=False): # Initialization methods="" ;# list of user defined methods skipped="" ;# list of items not shown vars="" ;# list of user variable=value pairs # If available, show object name in title display, instead of python raw hex name. print (" ") if (hasattr(obj,"name")): print("print_data obj:",getattr(obj,"name"),"class:",obj.__class__.__name__) else: print("print_data obj:",obj,"class:",obj.__class__.__name__) # Process all object data, including methods, attributes & variables item_list=dir(obj) for item in item_list: # print("print_data checking:",item) # Skip the built in python items starting with "__" if (re.search("^__",item)): skipped=skipped+item+" " # print("print_data skipped: ",item," due to ^__") continue # Try to get value string of item. try: # getting attribute string value avoids some errors value=str(getattr(obj,item)) # value=eval(obj.item) ;# doesnt work, with/without eval # Look at value for user defined methods vs variables if (re.search("^<(bound|built-in)",value)): methods=methods+item+" " # print("print_data method:",item+"="+value) else: vars=vars+item+"="+value+" " # print("print_data vars:",item+"="+value) except: skipped=skipped+item+" " print("print_data ERROR: skipped:",item," could not get value") # Display results print("print_data vars:",vars) print("print_data methods:",methods) # Show verbose info as optionally requested. if (v): try: print("print_data __dict__:",str(getattr(obj,"__dict__"))) ;# sometimes has all vars & values except: print("print_data: NO __dict__ !") print("print_data skipped:",skipped) print (" ") return