how to use __str__ and __repr__?

Jim Newton jimka at rdrop.com
Tue Jun 8 02:12:22 EDT 2004


hmm, even when i change it to calling str() rather than __str__()
it does not work.

class another:
	pass

print another() # works
another().str() # does not work

does anyone know why?

-jim

Peter Hansen wrote:
> Jim Newton wrote:
> 
>> i read that in the documenation. and i assumed from that that
>>     print another()
>> actually prints the string returned from another().__str__()
>> and thus __str__ must be being inherited from the superclass
>> of another, but apparently print does something different.
>>
>> why does print another() actually print something rather than
>> complaining that there is no __str__ defined?
> 
> 
> I believe print basically calls str(obj) on the object, and
> str() is a builtin which (I believe) basically tries to call
> __str__() and if that is not defined, calls __repr__().  If
> __repr__ is not defined, it probably defers to a standard
> representation based on the id() of the object, which is
> always defined.
> 
> Not sure what else you're trying to do (I haven't read your
> full post) but I believe this and some thought should answer
> for pretty much everything you're seeing.
> 
> Note that you should probably never call __str__() directly,
> but call the str() builtin instead.  Same for __repr__()
> versus the repr() builtin.
> 
> -Peter




More information about the Python-list mailing list