Custom __str__ methods¶
If you define a custom __str__
method for any of your classes,
functions like print()
expect __str__
on Py2 to return a byte
string, whereas on Py3 they expect a (unicode) string.
Use the following decorator to map the __str__
to __unicode__
on
Py2 and define __str__
to encode it as utf-8:
from future.utils import python_2_unicode_compatible
@python_2_unicode_compatible
class MyClass(object):
def __str__(self):
return u'Unicode string: \u5b54\u5b50'
a = MyClass()
# This then prints the name of a Chinese philosopher:
print(a)
This decorator is identical to the decorator of the same name in
django.utils.encoding
.
This decorator is a no-op on Python 3.