confused about __str__ vs. __repr__

Neal Becker ndbecker2 at
Thu Dec 18 19:35:33 CET 2008

Mel wrote:

> Neal Becker wrote:
>> Tino Wildenhain wrote:
>>> Neal Becker wrote:
>>>> Reading some FAQ, I see that __str__ is "meant for human eyes".
>>>> But it seems that:
>>>> class X(object):
>>>>     def __str__(self):
>>>>         return "str"
>>>>     def __repr__(self):
>>>>         return "repr"
>>>> x = X()
>>>> d = {0 : x}
>>>> print d
>>>> {0: repr}
>>>> So if __str__ is "meant for human eyes", then why isn't print using it!
>>> it is:
>>>  > print x
>>> str
>>> but dict just uses repr() for all its childs to print.
>>> T.
>> That makes no sense to me.  If I call 'print' on a container, why
>> wouldn't
>> it recursively  print on the contained objects?  Since print means call
>> str, printing a container should recursively call str on the objects.
> Basically because there are too many right ways to format the resulting
> report.  Space separated?  Tab separated?  One per line?  Boxes around
> them?  As HTML definition lists?  Creating a standard report form would
> take a lot of work and wouldn't, finally, solve very many peoples'
> problems.
>         Mel.
Thanks, but the question of how to format the container is different from how to format the primitive elements of the container.  I was suggesting that printing an element of a container should be consistent with printing the element without the container, i.e.,

print [a]
should be consistent with
print a

More information about the Python-list mailing list