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)
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
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/