Ce qui pourrait générer le comportement suivant?interpolation de chaîne python
>>> print str(msg)
my message
>>> print unicode(msg)
my message
Mais:
>>> print '%s' % msg
another message
Plus d'info:
- mon objet
msg
est héritée deunicode
. - les méthodes
__str__
/__unicode__
/__repr__
méthodes ont été remplacées pour retourner la chaîne'my message'
. - l'objet
msg
a été initialisé avec la chaîne'another message'
. - cela est en cours d'exécution sur Python 2.5
- n'a pas été modifié la variable
msg
entre les tests - c'est en fait réel doctest qui est vraiment de donner à ces résultats.
Je voudrais une solution qui correspond à cette doctest, en toute simplicité minimale (en particulier autour de l'héritage réel):
>>> print '%s' % msg
my message
Merci pour toutes les suggestions.
Je ne pense pas que cela vous aidera plus, mais pour les lecteurs curieux (et pythonist aventureux), voici la mise en œuvre de l'objet:
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)
Voici comment nous créons l'objet msg:
>>> msg = Message('another message', 'mydomain', default='my message')
paquets Zope la version et le code utilisés sont:
- zope.i18n-3.4.0 (interpolation() method code)
- zope.i18nmessageid-3.4.3 (Message class code)
INFO EDIT:
- ajouté/mis à jour les noms des méthodes qui ont été outrepassée
- a ajouté un peu plus d'informations (version python, et informations mineures)
- mis à jour des informations erronées (la classe de `msg` est basée sur la classe` unicode` et non sur `basetring`)
- a ajouté l'implémentation actuelle ion de la classe utilisée
@extraneon: il est python 2 .x: 'print' est une instruction, basetring, unicode! – SilentGhost
Modifier la valeur de la variable 'msg' entre' print's l'expliquerait – van
Avez-vous le code réel pour cet objet? (Ou plutôt sa classe.) Il serait utile si vous pouviez le coller ici ... –