Ce n'est pas aussi facile qu'il semble, un certain noyau de la bibliothèque de fonctions ne fonctionnent pas seulement str est écrasé (vérifié avec Python 2.7), voir ce fil de discussion pour des exemples
Python: comment faire une classe JSON serializable
Aussi, essayez ceci
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)
produit
'""'
et pas
'"a"'
comme on pourrait l'attendre.
EDIT: répondre à des mchicago commentaire:
unicode n'a pas d'attributs -- il est immuable de la chaîne, la valeur de ce qui est caché et n'est pas disponible à partir de haut-niveau du code Python. L' json
module utilise re
pour la génération de la représentation de chaîne qui semble avoir accès à cet attribut interne. Voici un exemple simple pour justifier ce:
b = A('b')
print b
produit
'a'
alors que
json.dumps({'b': b})
produit
{"b": "b"}
vous voyez donc que la représentation interne est utilisé par certaines bibliothèques natives, probablement pour des raisons de performances.
Voir aussi ce pour plus de détails: http://www.laurentluce.com/posts/python-string-objects-implementation/