In Java, I can override the
toString() method of my class. Then Java’s print function prints the string representation of the object defined by its
toString(). Is there a Python equivalent to Java’s
For example, I have a PlayCard class. I have an instance c of PlayCard. Now:
>>> print(c) <__main__.Card object at 0x01FD5D30>
But what I want is something like:
>>> print(c) A♣
How do I customize the string representation of my class instances?
I’m using Python 3.x
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 examples
How to make a class JSON serializable
Also, try this
import json class 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')
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/