Anulación de métodos especiales en una instancia

Espero que alguien pueda responder a esto que tenga un buen conocimiento profundo de Python :)

Considere el siguiente código:

<code>>>> class A(object):
...     pass
...
>>> def __repr__(self):
...     return "A"
...
>>> from types import MethodType
>>> a = A()
>>> a
<__main__.A object at 0x00AC6990>
>>> repr(a)
'<__main__.A object at 0x00AC6990>'
>>> setattr(a, "__repr__", MethodType(__repr__, a, a.__class__))
>>> a
<__main__.A object at 0x00AC6990>
>>> repr(a)
'<__main__.A object at 0x00AC6990>'
>>>
</code>

Observe cómo repr (a) no produce el resultado esperado de "A"? Quiero saber por qué este es el caso y si hay una manera de lograrlo ...

En contraste, el siguiente ejemplo funciona sin embargo (Tal vez porque no estamos tratando de anular un método especial?):

<code>>>> class A(object):
...     def foo(self):
...             return "foo"
...
>>> def bar(self):
...     return "bar"
...
>>> from types import MethodType
>>> a = A()
>>> a.foo()
'foo'
>>> setattr(a, "foo", MethodType(bar, a, a.__class__))
>>> a.foo()
'bar'
>>>
</code>

Respuestas a la pregunta(4)

Su respuesta a la pregunta