Reputation: 79228
I just want to quickly see the properties and values of an object in Python, how do I do that in the terminal on a mac (very basic stuff, never used python)?
Specifically, I want to see what message.attachments
are in this Google App Engine MailHandler example (images, videos, docs, etc.).
Upvotes: 21
Views: 7635
Reputation: 167
Or unify Abrer and Mazur answers and get:
from pprint import pprint
pprint(my_object.__dict__ )
Upvotes: 0
Reputation: 63
Try
repr(obj) # returns a printable representation of the given object
or
dir(obj) # the list of object methods
or
obj.__dict__ # object variables
Upvotes: 3
Reputation: 3816
I'm surprised no one else has mentioned Python's __str__
method, which provides a string representation of an object. Unfortunately, it doesn't seem to print automatically in pdb.
One can also use __repr__
for that, but __repr__
has other requirements: for one thing, you are (at least in theory) supposed to be able to eval()
the output of __repr__
, though that requirement seems to be enforced only rarely.
Upvotes: 2
Reputation: 74695
Update
There are better ways to do this than dir
. See other answers.
Original Answer
Use the built in function dir(fp)
to see the attributes of fp
.
Upvotes: 8
Reputation: 526573
If you want to dump the entire object, you can use the pprint
module to get a pretty-printed version of it.
from pprint import pprint
pprint(my_object)
# If there are many levels of recursion, and you don't want to see them all
# you can use the depth parameter to limit how many levels it goes down
pprint(my_object, depth=2)
Edit: I may have misread what you meant by 'object' - if you're wanting to look at class instances, as opposed to basic data structures like dicts, you may want to look at the inspect
module instead.
Upvotes: 19
Reputation: 70994
use the getmembers
attribute of the inspect
module
It will return a list of (key, value)
tuples. It gets the value from obj.__dict__
if available and uses getattr
if the the there is no corresponding entry in obj.__dict__
. It can save you from writing a few lines of code for this purpose.
Upvotes: 16