• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`repr` --- Alternate :func:`repr` implementation
2=====================================================
3
4.. module:: repr
5   :synopsis: Alternate repr() implementation with size limits.
6   :noindex:
7.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
8
9.. note::
10   The :mod:`repr` module has been renamed to :mod:`reprlib` in Python 3.  The
11   :term:`2to3` tool will automatically adapt imports when converting your
12   sources to Python 3.
13
14**Source code:** :source:`Lib/repr.py`
15
16--------------
17
18The :mod:`repr` module provides a means for producing object representations
19with limits on the size of the resulting strings. This is used in the Python
20debugger and may be useful in other contexts as well.
21
22This module provides a class, an instance, and a function:
23
24
25.. class:: Repr()
26
27   Class which provides formatting services useful in implementing functions
28   similar to the built-in :ref:`repr() <func-repr>`; size limits for different
29   object types are added to avoid the generation of representations which are
30   excessively long.
31
32
33.. data:: aRepr
34
35   This is an instance of :class:`Repr` which is used to provide the :func:`.repr`
36   function described below.  Changing the attributes of this object will affect
37   the size limits used by :func:`.repr` and the Python debugger.
38
39
40.. function:: repr(obj)
41
42   This is the :meth:`~Repr.repr` method of ``aRepr``.  It returns a string
43   similar to that returned by the built-in function of the same name, but with
44   limits on most sizes.
45
46
47.. _repr-objects:
48
49Repr Objects
50------------
51
52:class:`Repr` instances provide several attributes which can be used to provide
53size limits for the representations of different object types,  and methods
54which format specific object types.
55
56
57.. attribute:: Repr.maxlevel
58
59   Depth limit on the creation of recursive representations.  The default is ``6``.
60
61
62.. attribute:: Repr.maxdict
63               Repr.maxlist
64               Repr.maxtuple
65               Repr.maxset
66               Repr.maxfrozenset
67               Repr.maxdeque
68               Repr.maxarray
69
70   Limits on the number of entries represented for the named object type.  The
71   default is ``4`` for :attr:`maxdict`, ``5`` for :attr:`maxarray`, and  ``6`` for
72   the others.
73
74   .. versionadded:: 2.4
75      :attr:`maxset`, :attr:`maxfrozenset`, and :attr:`set`.
76
77
78.. attribute:: Repr.maxlong
79
80   Maximum number of characters in the representation for a long integer.  Digits
81   are dropped from the middle.  The default is ``40``.
82
83
84.. attribute:: Repr.maxstring
85
86   Limit on the number of characters in the representation of the string.  Note
87   that the "normal" representation of the string is used as the character source:
88   if escape sequences are needed in the representation, these may be mangled when
89   the representation is shortened.  The default is ``30``.
90
91
92.. attribute:: Repr.maxother
93
94   This limit is used to control the size of object types for which no specific
95   formatting method is available on the :class:`Repr` object. It is applied in a
96   similar manner as :attr:`maxstring`.  The default is ``20``.
97
98
99.. method:: Repr.repr(obj)
100
101   The equivalent to the built-in :ref:`repr() <func-repr>` that uses the
102   formatting imposed by the instance.
103
104
105.. method:: Repr.repr1(obj, level)
106
107   Recursive implementation used by :meth:`.repr`.  This uses the type of *obj* to
108   determine which formatting method to call, passing it *obj* and *level*.  The
109   type-specific methods should call :meth:`repr1` to perform recursive formatting,
110   with ``level - 1`` for the value of *level* in the recursive  call.
111
112
113.. method:: Repr.repr_TYPE(obj, level)
114   :noindex:
115
116   Formatting methods for specific types are implemented as methods with a name
117   based on the type name.  In the method name, **TYPE** is replaced by
118   ``string.join(string.split(type(obj).__name__, '_'))``. Dispatch to these
119   methods is handled by :meth:`repr1`. Type-specific methods which need to
120   recursively format a value should call ``self.repr1(subobj, level - 1)``.
121
122
123.. _subclassing-reprs:
124
125Subclassing Repr Objects
126------------------------
127
128The use of dynamic dispatching by :meth:`Repr.repr1` allows subclasses of
129:class:`Repr` to add support for additional built-in object types or to modify
130the handling of types already supported. This example shows how special support
131for file objects could be added::
132
133   import repr as reprlib
134   import sys
135
136   class MyRepr(reprlib.Repr):
137       def repr_file(self, obj, level):
138           if obj.name in ['<stdin>', '<stdout>', '<stderr>']:
139               return obj.name
140           else:
141               return repr(obj)
142
143   aRepr = MyRepr()
144   print aRepr.repr(sys.stdin)          # prints '<stdin>'
145
146