¿Qué podría generar el siguiente comportamiento?cadena de python interpolación
>>> print str(msg)
my message
>>> print unicode(msg)
my message
Pero:
>>> print '%s' % msg
another message
Más información:
- mi objetivo
msg
se hereda deunicode
. - los métodos
__str__
/__unicode__
/__repr__
se anularon los métodos para devolver la cadena'my message'
. - el objeto
msg
se inicializó con la cadena'another message'
. - esto se está ejecutando en Python 2.5
- la variable
msg
no fue cambiado entre las pruebas - Esto es realmente verdadero doctest que está realmente dando a estos resultados.
me gustaría una solución que coincida con este doctest, con un mínimo esfuerzo (especialmente alrededor de la herencia real):
>>> print '%s' % msg
my message
Gracias por todas las sugerencias.
no siento que esto ayudará más, pero para los lectores curiosos (y pythonist aventurero), aquí está la implementación del objeto:
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)
Esto es como creamos msg objeto:
>>> msg = Message('another message', 'mydomain', default='my message')
Zope paquetes de la versión y el código utilizado son:
- zope.i18n-3.4.0 (interpolation() method code)
- zope.i18nmessageid-3.4.3 (Message class code)
EDITAR INFORMACIÓN:
- añadido/modificado los nombres de los métodos que se han anulado
- añade algo más de información (versión pitón, e información menor)
- actualizó alguna información incorrecta (la clase de `msg` se basa en la clase` unicode` y no `basetring`)
- agregó la implementación real ion de la clase utilizada
@extraneon: es pitón 2 .x: 'print' es una declaración, basetring, unicode! – SilentGhost
cambiando el valor de la variable 'msg' entre' print's lo explicaría – van
¿Tiene el código real para ese objeto? (O más bien, su clase.) Sería útil si pudieras pegarlo aquí ... –