Commit 98b140c1 authored by Raymond Hettinger's avatar Raymond Hettinger

Add entry for reprlib.

parent e6d4c5ba
...@@ -5,6 +5,9 @@ ...@@ -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
......
...@@ -987,6 +987,32 @@ implemented:: ...@@ -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. ...@@ -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
=============== ===============
......
...@@ -30,6 +30,7 @@ def recursive_repr(fillvalue='...'): ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment