confused about __str__ vs. __repr__
Neal Becker
ndbecker2 at gmail.com
Thu Dec 18 13:35:33 EST 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