¿Por qué no puedo reemplazar el método __str__ de un objeto Python con otra función?

Aquí está el código:

<code>class Dummy(object):
    def __init__(self, v):
        self.ticker = v


def main():
        def _assign_custom_str(x):
            def _show_ticker(t):                
                return t.ticker
            x.__str__ = _show_ticker
            x.__repr__ = _show_ticker
            return x


    a = [Dummy(1), Dummy(2)]

    a1 = [_assign_custom_str(t) for t in a]
    print a1[1]
    # print a1[1].__str__ # test to if orig __str__ is replaced
</code>

Tenía la esperanza de ver la salida como esta

<code>2
</code>

Sin embargo, en cambio veo la representación estándar:

<code><__main__.Dummy object at 0x01237730>
</code>

¿Por qué?

Respuestas a la pregunta(2)

Su respuesta a la pregunta