__str__ vs. __repr__
Gordon McMillan
gmcm at hypernet.com
Mon Nov 1 15:40:01 EST 1999
Randall Hopper wrote:
> 1) Is there a convention for what __str__ and __repr__ should
> return for
> classes?
> 2) Or, whatever they return, should they return the same value?
> 3) If so, why have both in the language?
If possible, __repr__ should return something that when eval'd
yields an identical object. If that's not possible, it should be
the programmer's view of the object.
__str__ is free to return a highly munged user-friendly string.
str(obj) will use obj.__repr__ if obj.__str__ doesn't exist.
Consider this:
class HTMLTable:
blah blah blah
t = HTMLTable(...)
repr(t) # -> "MyModule.HTMLTable([...])"
str(t) # -> "<TABLE><TR>....."
(see IPWP for this idea carried to extreme lengths).
> Searching the archives yields an example with odd behavior
> that
> suggests they should generally return the same value:
>
> class c:
> def __str__(self): return 'foo'
> def __repr__(self): return 'bar'
>
> >>> str(c())
> 'foo'
>
> >>> str([c(), c(), c()])
> '[bar, bar, bar]'
Sick enough, but not convoluted enough, to be a Tim-ism...
- Gordon
More information about the Python-list
mailing list