espero que alguien pueda responder a esta que tiene una buena comprensión profunda de Python :)métodos especiales Anulación de una instancia
Considere el siguiente código:
>>> 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>'
>>>
Note como repr (a) no cede el resultado esperado de "A"? Quiero saber por qué este es el caso y si hay una manera de lograr esto ...
Me contraste, el siguiente ejemplo funciona sin embargo (Tal vez porque no estamos tratando de reemplazar un método especial?):
>>> 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'
>>>
Probablemente obtendrá una respuesta mucho más esclarecedora si dice lo que finalmente está tratando de lograr. – mattmanser
Para las clases de estilo nuevo, se buscan métodos especiales en la clase en lugar de la instancia. Consulte mi respuesta a continuación para obtener más detalles y algunas soluciones. –
No pude describir lo que quiero hacer en detalle. Lo siento. Pero, en resumen, estoy tratando de modelar un prototipo de modelo OO donde pueda hacer operadores como: World = Object(). Clone(). Mixin (World); Where World es una clase con una colección de métodos que reemplaza/reemplaza uno en la instancia de Object.clone(). –