source: http://satyajit.ranjeev.in/2012/03/14/python-repr-str.html
This is usually a question asked in many Python interviews: What is the difference between the
__str__
and __repr__
methods of a Python object. The same question was asked by one of my colleagues, which got me researching.
In short
__repr__
goal is to be unambigous and __str__
is to be readable.
The official Python documentation says
__repr__
is used to compute the “official” string representation of an object and __str__
is used to compute the “informal” string representation of an object. The print
statement and str()
built-in function uses __str__
to display the string representation of the object while the repr()
built-in function uses __repr__
to display the object. Using this definition let us take an example to understand what the two methods actually do.
Lets create a datetime object:
>>> import datetime
>>> today = datetime.datetime.now()
When I use the built-in function
str()
to display today:>>> str(today)
'2012-03-14 09:21:58.130922'
You can see that the date was displayed as a string in a way that the user can understand the date and time. Now lets see when I use the built-in function
repr()
:>>> repr(today)
'datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)'
You can see that this also returned a string but the string was the “official” representation of a datetime object. What does official mean? Using the “official” string representation I can reconstruct the object:
>>> eval('datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)')
datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)
The
eval()
built-in function accepts a string and converts it to a datetime object.
Most functions while trying to get the string representation use the
__str__
function, if missing uses __repr__
. Thus in a general every class you code must have a __repr__
and if you think it would be useful to have a string version of the object, as in the case of datetime
create a __str__
function.
A few references:
댓글
댓글 쓰기