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>