To nie jest tak proste, jak się wydaje, niektóre funkcje biblioteczne rdzeń nie działają, gdy tylko str są nadpisywane (sprawdzane Python 2.7), zobacz ten wątek dla przykładów: How to make a class JSON serializable Wypróbuj także:
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)
produkuje
'""'
a nie
'"a"'
jak można by oczekiwać.
EDIT: odpowiadając za komentarz mchicago:
unicode nie posiada żadnych atrybutów - to niezmienne łańcuch, którego wartość jest ukryta i niedostępna z wysokiego poziomu kodu Pythona. Moduł json
używa re
do generowania reprezentacji ciągów, która wydaje się mieć dostęp do tego wewnętrznego atrybutu.Oto prosty przykład, aby uzasadnić to:
b = A('b') print b
produkuje
'a'
podczas
json.dumps({'b': b})
produkuje
{"b": "b"}
, więc widzisz, że wewnętrzna reprezentacja jest używana przez niektóre biblioteki natywne, prawdopodobnie ze względu na wydajność.
Zobacz także to więcej szczegółów: http://www.laurentluce.com/posts/python-string-objects-implementation/
Co to SLK? –
slk jest błędem pisarskim. poprawione. – snakile