Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Re: confused about __str__ vs. __repr__

Reply
Thread Tools

Re: confused about __str__ vs. __repr__

 
 
Neal Becker
Guest
Posts: n/a
 
      12-18-2008
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.

 
Reply With Quote
 
 
 
 
Mel
Guest
Posts: n/a
 
      12-18-2008
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.

 
Reply With Quote
 
 
 
 
Neal Becker
Guest
Posts: n/a
 
      12-18-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


 
Reply With Quote
 
Steve Holden
Guest
Posts: n/a
 
      12-18-2008
Neal Becker wrote:
> 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
>

Indeed, but that only demonstrates that you have failed to take the
point of the more perspicacious replied to your query.

Python is trying to avoid throwing away useful information. The only
people who would want to see a representation of a data structure such
as a list are programmers: if you want to show a list of values to a
regular user you format it in some required way.

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: confused about __str__ vs. __repr__ Neal Becker Python 12 12-19-2008 05:20 AM
confused about __str__ vs. __repr__ Neal Becker Python 1 12-18-2008 02:20 PM
FAQ: __str__ vs __repr__ Jan Danielsson Python 15 06-21-2005 01:44 PM
Access to formatting controls from within __repr__ or __str__? Dan Sommers Python 3 02-19-2005 11:02 AM
how to use __str__ and __repr__? Jim Newton Python 15 06-09-2004 01:21 PM



Advertisments