La stampa Python non utilizza __repr__
, __unicode__
o __str__
per la sottoclasse unicode durante la stampa. Qualche indizio su cosa sto facendo male?La stampa Python non sta utilizzando __repr__, __unicode__ o __str__ per la sottoclasse unicode?
Ecco il mio codice:
Usare Python 2.5.2 (R252: 60911, 13 Ottobre, 2009, 14:11:59)
>>> class MyUni(unicode):
... def __repr__(self):
... return "__repr__"
... def __unicode__(self):
... return unicode("__unicode__")
... def __str__(self):
... return str("__str__")
...
>>> s = MyUni("HI")
>>> s
'__repr__'
>>> print s
'HI'
io non sono sicuro se questo è un accurato approssimazione di quanto sopra, ma solo per il confronto:
>>> class MyUni(object):
... def __new__(cls, s):
... return super(MyUni, cls).__new__(cls)
... def __repr__(self):
... return "__repr__"
... def __unicode__(self):
... return unicode("__unicode__")
... def __str__(self):
... return str("__str__")
...
>>> s = MyUni("HI")
>>> s
'__repr__'
>>> print s
'__str__'
[Modificato ...] suona come il modo migliore per ottenere un oggetto stringa che isinstance (esempio, basestring) e offre il controllo su unicode re girare valori, e con un rist unicode è ...
>>> class UserUnicode(str):
... def __repr__(self):
... return "u'%s'" % super(UserUnicode, self).__str__()
... def __str__(self):
... return super(UserUnicode, self).__str__()
... def __unicode__(self):
... return unicode(super(UserUnicode, self).__str__())
...
>>> s = UserUnicode("HI")
>>> s
u'HI'
>>> print s
'HI'
>>> len(s)
2
Il _ str _ e _ repr _ sopra aggiungere nulla a questo esempio, ma l'idea è di mostrare un modello esplicitamente , da estendere secondo necessità.
solo per dimostrare che questo schema garantisce il controllo:
>>> class UserUnicode(str):
... def __repr__(self):
... return "u'%s'" % "__repr__"
... def __str__(self):
... return "__str__"
... def __unicode__(self):
... return unicode("__unicode__")
...
>>> s = UserUnicode("HI")
>>> s
u'__repr__'
>>> print s
'__str__'
Pensieri?
Il tuo codice è davvero rientrato come il primo esempio? – GreenMatt
Ho dovuto indovinare qual è la tua domanda. Se ho sbagliato, per favore aggiorna il tuo messaggio in * includi una domanda reale e chiara *. –
Anche se questo è un bel trucco, vorrei chiedere perché in h *** ti piacerebbe sottoclasse str o unicode? Voglio dire, i dati saranno immutabili, quindi l'oggetto risultante sarà abbastanza inutile. – kay