Cosa potrebbe generare il seguente comportamento?interpolazione stringa di pitone
>>> print str(msg)
my message
>>> print unicode(msg)
my message
Ma:
>>> print '%s' % msg
another message
Maggiori informazioni:
- mia
msg
oggetto ereditato daunicode
. - i metodi
__str__
/__unicode__
/__repr__
sono stati sovrascritti per restituire la stringa'my message'
. - l'oggetto
msg
è stato inizializzato con la stringa'another message'
. - questo è in esecuzione su Python 2.5
- la variabile
msg
non è stato cambiato tra i test - questo è in realtà reale doctest che sta realmente dando questi risultati.
vorrei una soluzione che corrisponde a questo doctest, con il minimo sforzo (soprattutto intorno alla successione):
>>> print '%s' % msg
my message
Grazie per tutti i suggerimenti.
Non mi sento questo aiuterà più, ma per i lettori più curiosi (e pythonist avventurosi), ecco l'attuazione dell'oggetto:
class Message(zope.i18nmessageid.Message):
def __repr__(self):
return repr(zope.i18n.interpolate(self.default, self.mapping))
def __str__(self):
return zope.i18n.interpolate(self.default, self.mapping)
def __unicode__(self):
return zope.i18n.interpolate(self.default, self.mapping)
questo modo creiamo il msg oggetto:
>>> msg = Message('another message', 'mydomain', default='my message')
Zope versione dei pacchetti e il codice usati sono:
- zope.i18n-3.4.0 (interpolation() method code)
- zope.i18nmessageid-3.4.3 (Message class code)
EDIT INFORMAZIONI:
- aggiunto/aggiornato i nomi dei metodi che sono stati sovrascritto
- aggiunto qualche informazione in più (versione di Python, e informazioni minori)
- ha aggiornato alcune informazioni errate (la classe di `msg` è basata sulla classe` unicode` e non `basestring`)
- aggiunto l'implementazione effettiva ione della classe utilizzata
@extraneon: è python 2 .x: 'print' è un'istruzione, basestring, unicode! – SilentGhost
cambiando il valore della variabile 'msg' tra' print' s lo spiegheremo – van
Hai il codice effettivo per quell'oggetto? (O meglio la sua classe.) Sarebbe utile se tu potessi incollarlo qui ... –