Во-первых, есть ли один?
В противном случае есть ли хороший способ вызвать что-то как
print '%s' % obj
звонить obj.__unicode__
вместо obj.__str__
?
Просто используйте строку формата Unicode вместо того, чтобы иметь строку байтов в этой роли:
>>> class X(object):
... def __str__(self): return 'str'
... def __unicode__(self): return u'unicode'
...
>>> x = X()
>>> print u'%s' % x
unicode
Во-первых, есть ли он?
Конечно (вроде того). Строка формата unicode преобразует значения формата в unicode, подразумевая, что obj.__unicode__
будет вызван (reference).
u'this is a %s' % ('unicode string')
Помимо вышесказанного, нет особых причин, по которым вы не могли бы быть явными:
print '%s' % (unicode(obj))
Нет. В этом не было бы смысла.
print (u "% s"% obj) .encode (some_encoding)
будет использовать obj .__ unicode __
.