python why doesnt str or repr or unicode get called when calling my_string.lower()
<p>given this class</p>

<pre><code>class Stringy(unicode):
    def __init__(self,something):
        self.something = something
    def __repr__(self):
        return "Stringy(%s)"%repr(self.something)
    def __str__(self):
        return "str(%s)"%repr(self.something)
    def __unicode__(self):
        return "unicode(%s)"%repr(self.something)
</code></pre>

<p>running the following</p>

<pre><code>s = Stringy("Hello")
print s.lower()  #prints "hello" !!! Why?
print s  # correctly prints str('Hello')
print unicode(s) #correctly prints unicode('Hello')
print [s]        #correctly prints Stringy('Hello')
print s.upper()  #prints "HELLO"  !!! Why?
</code></pre>

<p>why don't <code>upper</code>/<code>lower</code>/etc  trigger the <code>__str__</code> method? </p>

<p>shouldnt under the hood something like
<code>unicode(self).lower()</code> be happening ?</p>

<p>or <code>str(self).lower()</code> ?</p>
