Christian Heimes <[EMAIL PROTECTED]> wrote: > Bruno Desthuilliers wrote: >> I Must have miss something... > > Yeah, You have missed the beginning of the third sentence: "The tp_print > slot is not available from Python code". The tp_print slot is only > available in C code and is part of the C definition of a type. Hence tp_ > as type.
It isn't easy to come up with an example which actually demonstrates that print doesn't just call str, but after a little playing around I managed it: >>> class mystr(str): def __str__(self): return mystr('oops') >>> s = mystr('aargh') >>> s 'aargh' >>> str(s) 'oops' >>> print s Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> print s RuntimeError: maximum recursion depth exceeded >>> Alternatively: >>> class mystr(str): def __str__(self): if self=='oops': return 'you printed me!' return mystr('oops') >>> s = mystr('aargh') >>> str(s) 'oops' >>> str(str(s)) 'you printed me!' >>> print s and on that last line idle locks until you restart the shell. I can't immediately see why; the command line interpreter is fine so it seems just to be an idle problem: >>> class mystr(str): ... def __str__(self): ... if self=='oops': ... return 'you printed me!' ... return mystr('oops') ... >>> s = mystr('aargh') >>> s 'aargh' >>> str(s) 'oops' >>> print s you printed me! >>> -- http://mail.python.org/mailman/listinfo/python-list