How do I change the string representation of a Python class? [duplicate] How do I change the string representation of a Python class? [duplicate] python python

How do I change the string representation of a Python class? [duplicate]


The closest equivalent to Java's toString is to implement __str__ for your class. Put this in your class definition:

def __str__(self):     return "foo"

You may also want to implement __repr__ to aid in debugging.

See here for more information:


This is not as easy as it seems, some core library functions don't work when only str is overwritten (checked with Python 2.7), see this thread for examplesHow to make a class JSON serializableAlso, try this

import jsonclass A(unicode):    def __str__(self):        return 'a'    def __unicode__(self):        return u'a'    def __repr__(self):        return 'a'a = A()json.dumps(a)

produces

'""'

and not

'"a"'

as would be expected.

EDIT: answering mchicago's comment:

unicode does not have any attributes -- it is an immutable string, the value of which is hidden and not available from high-level Python code. The json module uses re for generating the string representation which seems to have access to this internal attribute. Here's a simple example to justify this:

b = A('b')print b

produces

'a'

while

json.dumps({'b': b})

produces

{"b": "b"}

so you see that the internal representation is used by some native libraries, probably for performance reasons.

See also this for more details: http://www.laurentluce.com/posts/python-string-objects-implementation/