Add entry for reprlib.

This commit is contained in:
Raymond Hettinger 2011-01-23 21:05:46 +00:00
parent e6d4c5bab8
commit 98b140c196
3 changed files with 30 additions and 3 deletions

View File

@ -5,6 +5,9 @@
:synopsis: Alternate repr() implementation with size limits. :synopsis: Alternate repr() implementation with size limits.
.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org> .. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
**Source code:** :source:`Lib/reprlib.py`
--------------
The :mod:`reprlib` module provides a means for producing object representations The :mod:`reprlib` module provides a means for producing object representations
with limits on the size of the resulting strings. This is used in the Python with limits on the size of the resulting strings. This is used in the Python

View File

@ -987,6 +987,32 @@ implemented::
(Patch submitted by Daniel Urban; :issue:`5867`.) (Patch submitted by Daniel Urban; :issue:`5867`.)
reprlib
-------
When writing a :meth:`__repr__` method for a custom container, it is easy to
forget to handle the case where a member refers back to the container itself.
Python's builtin objects such as :class:`list` and :class:`set` handle
self-reference by displaying "..." in the recursive part of the representation
string.
To help write such :meth:`__repr__` methods, the :mod:`reprlib` module has a new
decorator, :func:`reprlib.recursive_repr`, for detecting recursive calls to
:meth:`__repr__` and substituting a placeholder string instead:
>>> class MyList(list):
@recursive_repr()
def __repr__(self):
return '<' + '|'.join(map(repr, self)) + '>'
>>> m = MyList('abc')
>>> m.append(m)
>>> m.append('x')
>>> print(m)
<'a'|'b'|'c'|...|'x'>
(Contributed by Raymond Hettinger.)
contextlib contextlib
---------- ----------
@ -1697,9 +1723,6 @@ reading directly from dictionaries and strings.
- non-UTF8 percent encoding of non-ASCII characters - non-UTF8 percent encoding of non-ASCII characters
Issue 2987 for IPv6 (RFC2732) support in urlparse Issue 2987 for IPv6 (RFC2732) support in urlparse
.. XXX reprlib.recursive_repr
Multi-threading Multi-threading
=============== ===============

View File

@ -30,6 +30,7 @@ def recursive_repr(fillvalue='...'):
wrapper.__module__ = getattr(user_function, '__module__') wrapper.__module__ = getattr(user_function, '__module__')
wrapper.__doc__ = getattr(user_function, '__doc__') wrapper.__doc__ = getattr(user_function, '__doc__')
wrapper.__name__ = getattr(user_function, '__name__') wrapper.__name__ = getattr(user_function, '__name__')
wrapper.__name__ = getattr(user_function, '__annotations__', {})
return wrapper return wrapper
return decorating_function return decorating_function