help(unicode) prints something like:
class unicode(basestring)
| unicode(string [, encoding[, errors]]) -> object
...
but you can use something different from a basestring as argument, you can do unicode(1) and get u’1′. What happens in that call? int don’t have a __unicode__ method to be called.
If
__unicode__exists it is called, otherwise it falls back to__str__