netimen wrote: > 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?
You can't. Special methods are only looked up on classes. Diez -- http://mail.python.org/mailman/listinfo/python-list