[Python-Dev] pprint(iterator)

Paul Moore p.f.moore at gmail.com
Thu Jan 29 17:39:53 CET 2009


2009/1/29 Oleg Broytmann <phd at phd.pp.ru>:
> On Thu, Jan 29, 2009 at 08:06:18AM -0800, Aahz wrote:
>> On Thu, Jan 29, 2009, Michael Foord wrote:
>> > Don't we have a pretty-print API - and isn't it spelled __str__ ?
>>
>> In theory, yes.  In practice, we wouldn't be having this discussion if
>> that really worked.  But it probably would make sense to see how far
>> using __str__ can take us -- AFAICT enumobject.c doesn't define __str__
>> (although I may be missing something, I don't know Python at the C level
>> very well).
>
>   Container objects (tuples/lists/dicts/sets) don't define __str__.
> Is __pprint__ an attempt to redefine __str__?

Anyone feel like raising the topic of generic functions again? :-)

More practically, the undocumented simplegeneric decorator in pkgutil
could be used:

Python 2.6.1 (r261:67517, Dec  4 2008, 16:51:00) [MSC v.1500 32 bit
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pkgutil import simplegeneric
>>> @simplegeneric
... def f(obj):
...    return "Object of type %s" % type(obj)
...
>>> def str_f(s):
...    return "String: " + s
...
>>> f.register(str, str_f)
<function str_f at 0x00B461F0>
>>> f("Test")
'String: Test'
>>> f(1)
"Object of type <type 'int'>"
>>>

To me, that seems better than inventing yet another special method.

Paul.


More information about the Python-Dev mailing list