I couldn't substitute __str__ method of an instance. Though I managed
to substitute ordinary method of an instance:
from types import MethodType
class Foo(object):
pass
class Printer(object):
def __call__(self, obj_self):
return 'printed'
f = Foo()
f.printer = MethodType(Printer(), f, Foo)
print f.printer() # works fine - I get: 'printed'
print f # get: <__main__.Foo object at 0x00D69C10>
f.__str__ = MethodType(Printer(), f, Foo)
print f # still get: <__main__.Foo object at 0x00D69C10>. Why?
Foo.__str__ = MethodType(Printer(), None, Foo)
print f # works fine - I get: 'printed'
How can I substitute __str__ method of an instance?