blob: 5149bcf10f662a460d462d7d283e58e7c3fcc728 [file] [log] [blame]
Alexandre Vassalotti1f2ba4b2008-05-16 07:12:44 +00001:mod:`reprlib` --- Alternate :func:`repr` implementation
Alexandre Vassalottibee32532008-05-16 18:15:12 +00002========================================================
3
Alexandre Vassalotti1f2ba4b2008-05-16 07:12:44 +00004.. module:: reprlib
Georg Brandl116aa622007-08-15 14:28:22 +00005 :synopsis: Alternate repr() implementation with size limits.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl116aa622007-08-15 14:28:22 +00007.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
8
Raymond Hettinger98b140c2011-01-23 21:05:46 +00009**Source code:** :source:`Lib/reprlib.py`
10
11--------------
Georg Brandl116aa622007-08-15 14:28:22 +000012
Alexandre Vassalotti1f2ba4b2008-05-16 07:12:44 +000013The :mod:`reprlib` module provides a means for producing object representations
Georg Brandl116aa622007-08-15 14:28:22 +000014with limits on the size of the resulting strings. This is used in the Python
15debugger and may be useful in other contexts as well.
16
17This module provides a class, an instance, and a function:
18
19
20.. class:: Repr()
21
22 Class which provides formatting services useful in implementing functions
23 similar to the built-in :func:`repr`; size limits for different object types
24 are added to avoid the generation of representations which are excessively long.
25
26
27.. data:: aRepr
28
Georg Brandl502d9a52009-07-26 15:02:41 +000029 This is an instance of :class:`Repr` which is used to provide the
30 :func:`.repr` function described below. Changing the attributes of this
31 object will affect the size limits used by :func:`.repr` and the Python
32 debugger.
Georg Brandl116aa622007-08-15 14:28:22 +000033
34
35.. function:: repr(obj)
36
Georg Brandl502d9a52009-07-26 15:02:41 +000037 This is the :meth:`~Repr.repr` method of ``aRepr``. It returns a string
38 similar to that returned by the built-in function of the same name, but with
39 limits on most sizes.
Georg Brandl116aa622007-08-15 14:28:22 +000040
Raymond Hettinger98a5f3f2010-09-13 21:36:00 +000041In addition to size-limiting tools, the module also provides a decorator for
42detecting recursive calls to :meth:`__repr__` and substituting a placeholder
43string instead.
44
45.. decorator:: recursive_repr(fillvalue="...")
46
47 Decorator for :meth:`__repr__` methods to detect recursive calls within the
48 same thread. If a recursive call is made, the *fillvalue* is returned,
49 otherwise, the usual :meth:`__repr__` call is made. For example:
50
Marco Buttue65fcde2017-04-27 14:23:34 +020051 >>> from reprlib import recursive_repr
Raymond Hettinger98a5f3f2010-09-13 21:36:00 +000052 >>> class MyList(list):
53 ... @recursive_repr()
Raymond Hettinger400daed2014-08-02 22:32:10 -070054 ... def __repr__(self):
55 ... return '<' + '|'.join(map(repr, self)) + '>'
Raymond Hettinger98a5f3f2010-09-13 21:36:00 +000056 ...
57 >>> m = MyList('abc')
58 >>> m.append(m)
59 >>> m.append('x')
60 >>> print(m)
61 <'a'|'b'|'c'|...|'x'>
62
63 .. versionadded:: 3.2
64
Georg Brandl116aa622007-08-15 14:28:22 +000065
66.. _repr-objects:
67
68Repr Objects
69------------
70
Senthil Kumarana6bac952011-07-04 11:28:30 -070071:class:`Repr` instances provide several attributes which can be used to provide
Georg Brandl116aa622007-08-15 14:28:22 +000072size limits for the representations of different object types, and methods
73which format specific object types.
74
75
76.. attribute:: Repr.maxlevel
77
78 Depth limit on the creation of recursive representations. The default is ``6``.
79
80
81.. attribute:: Repr.maxdict
82 Repr.maxlist
83 Repr.maxtuple
84 Repr.maxset
85 Repr.maxfrozenset
86 Repr.maxdeque
87 Repr.maxarray
88
89 Limits on the number of entries represented for the named object type. The
90 default is ``4`` for :attr:`maxdict`, ``5`` for :attr:`maxarray`, and ``6`` for
91 the others.
92
Georg Brandl116aa622007-08-15 14:28:22 +000093
94.. attribute:: Repr.maxlong
95
Mark Dickinsonbf5c6a92009-01-17 10:21:23 +000096 Maximum number of characters in the representation for an integer. Digits
Georg Brandl116aa622007-08-15 14:28:22 +000097 are dropped from the middle. The default is ``40``.
98
99
100.. attribute:: Repr.maxstring
101
102 Limit on the number of characters in the representation of the string. Note
103 that the "normal" representation of the string is used as the character source:
104 if escape sequences are needed in the representation, these may be mangled when
105 the representation is shortened. The default is ``30``.
106
107
108.. attribute:: Repr.maxother
109
110 This limit is used to control the size of object types for which no specific
111 formatting method is available on the :class:`Repr` object. It is applied in a
112 similar manner as :attr:`maxstring`. The default is ``20``.
113
114
115.. method:: Repr.repr(obj)
116
117 The equivalent to the built-in :func:`repr` that uses the formatting imposed by
118 the instance.
119
120
121.. method:: Repr.repr1(obj, level)
122
Georg Brandl502d9a52009-07-26 15:02:41 +0000123 Recursive implementation used by :meth:`.repr`. This uses the type of *obj* to
Georg Brandl116aa622007-08-15 14:28:22 +0000124 determine which formatting method to call, passing it *obj* and *level*. The
125 type-specific methods should call :meth:`repr1` to perform recursive formatting,
126 with ``level - 1`` for the value of *level* in the recursive call.
127
128
129.. method:: Repr.repr_TYPE(obj, level)
130 :noindex:
131
132 Formatting methods for specific types are implemented as methods with a name
133 based on the type name. In the method name, **TYPE** is replaced by
Berker Peksag2d510e32014-09-18 06:05:14 +0300134 ``'_'.join(type(obj).__name__.split())``. Dispatch to these methods is
135 handled by :meth:`repr1`. Type-specific methods which need to recursively
136 format a value should call ``self.repr1(subobj, level - 1)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000137
138
139.. _subclassing-reprs:
140
141Subclassing Repr Objects
142------------------------
143
144The use of dynamic dispatching by :meth:`Repr.repr1` allows subclasses of
145:class:`Repr` to add support for additional built-in object types or to modify
146the handling of types already supported. This example shows how special support
147for file objects could be added::
148
Benjamin Petersonaa306692008-10-15 03:09:45 +0000149 import reprlib
Georg Brandl116aa622007-08-15 14:28:22 +0000150 import sys
151
Benjamin Petersonaa306692008-10-15 03:09:45 +0000152 class MyRepr(reprlib.Repr):
Berker Peksagedd6ec22014-10-12 05:11:16 +0300153
154 def repr_TextIOWrapper(self, obj, level):
155 if obj.name in {'<stdin>', '<stdout>', '<stderr>'}:
Georg Brandl116aa622007-08-15 14:28:22 +0000156 return obj.name
Berker Peksagedd6ec22014-10-12 05:11:16 +0300157 return repr(obj)
Georg Brandl116aa622007-08-15 14:28:22 +0000158
159 aRepr = MyRepr()
Georg Brandlede6c2a2010-01-05 10:22:04 +0000160 print(aRepr.repr(sys.stdin)) # prints '<stdin>'