In primo luogo, ce n'è uno?Carattere del formato stringa Python per __unicode__?
In caso contrario, c'è un bel modo per forzare qualcosa come
print '%s' % obj
chiamare obj.__unicode__
invece di obj.__str__
?
In primo luogo, ce n'è uno?Carattere del formato stringa Python per __unicode__?
In caso contrario, c'è un bel modo per forzare qualcosa come
print '%s' % obj
chiamare obj.__unicode__
invece di obj.__str__
?
Basta utilizzare una stringa di formato unicode, piuttosto che avere una stringa di byte in quel ruolo:
>>> class X(object):
... def __str__(self): return 'str'
... def __unicode__(self): return u'unicode'
...
>>> x = X()
>>> print u'%s' % x
unicode
No. Non avrebbe senso per questo di essere il caso.
print (u"%s" % obj).encode(some_encoding)
utilizzerà obj.__unicode__
.
Odia l'idea di indovinare ciecamente al 'some_encoding' come questa risposta costringerebbe uno a fare - una piattaforma decente imposterà' sys.stdout.encoding' in modo che una semplice 'stampa' funzionerà perfettamente, se non lo fai tu deve avvolgere sys.stdout in un wrapper che imposta la codifica, in ** un ** luogo (quindi puoi usare 'print' come è giusto e decente!), piuttosto che spargere tali supposizioni su tutto il mobilio (che a * * orribile ** modo di programmare). –
In primo luogo, ce n'è uno?
Sicuro (sorta di). Una stringa di formato Unicode convertirà i valori del formato in Unicode, implicando che verrà chiamato obj.__unicode__
(reference).
u'this is a %s' % ('unicode string')
A parte quanto sopra, non c'è alcun motivo particolare per cui non si poteva essere esplicito:
print '%s' % (unicode(obj))
'print '% s'% unicode (obj)' non è veramente esplicito. Converte implicitamente uno str in un unicode quando si applica%, che è tra le cose più brutte di Python. –
Ci siamo imbattuti in questo pochi secondi dopo. Immagino che questo funzioni per me! – mpen
... e si basa su 'print'ing una stringa unicode esattamente come il mio tanto vituperato, tanto downvoted, e molto prima-risposta - vedere questo upvoted invece potrebbe confermare il sospetto che le downvoters sono infatti intenti su un personal vendetta, non un'obiezione tecnica, qualunque parola di bocca spalancata possa tentare di mascherarla ;-). –
Avere '__unicode__' restituire un bytestring e la stampa di un oggetto Unicode fanno esempi terribili. –
@Mike, d'accordo sul problema "return" - corretto quell'errore di battitura. Forte disaccordo sul 'print': su una piattaforma decente,' sys.stdout.encoding' è impostato e la stampa funzionerà perfettamente - mentre stai indovinando ciecamente il 'some_encoding' da usare (se non è su sys. come puoi indovinarlo, prega?). –
su quale "piattaforma decente" fa 'python -c 'print u" \ xff "'> some_file' non genera un UnicodeEncodeError? – habnabit