mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 03:22:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
\section{\module{repr} ---
 | 
						|
         Alternate \function{repr()} implementation}
 | 
						|
 | 
						|
\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
 | 
						|
\declaremodule{standard}{repr}
 | 
						|
\modulesynopsis{Alternate \function{repr()} implementation with size limits.}
 | 
						|
 | 
						|
 | 
						|
The \module{repr} module provides a means for producing object
 | 
						|
representations with limits on the size of the resulting strings.
 | 
						|
This is used in the Python debugger and may be useful in other
 | 
						|
contexts as well.
 | 
						|
 | 
						|
This module provides a class, an instance, and a function:
 | 
						|
 | 
						|
 | 
						|
\begin{classdesc}{Repr}{}
 | 
						|
  Class which provides formatting services useful in implementing
 | 
						|
  functions similar to the built-in \function{repr()}; size limits for 
 | 
						|
  different object types are added to avoid the generation of
 | 
						|
  representations which are excessively long.
 | 
						|
\end{classdesc}
 | 
						|
 | 
						|
 | 
						|
\begin{datadesc}{aRepr}
 | 
						|
  This is an instance of \class{Repr} which is used to provide the
 | 
						|
  \function{repr()} function described below.  Changing the attributes
 | 
						|
  of this object will affect the size limits used by \function{repr()}
 | 
						|
  and the Python debugger.
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
 | 
						|
\begin{funcdesc}{repr}{obj}
 | 
						|
  This is the \method{repr()} method of \code{aRepr}.  It returns a
 | 
						|
  string similar to that returned by the built-in function of the same 
 | 
						|
  name, but with limits on most sizes.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
 | 
						|
\subsection{Repr Objects \label{Repr-objects}}
 | 
						|
 | 
						|
\class{Repr} instances provide several members which can be used to
 | 
						|
provide size limits for the representations of different object types, 
 | 
						|
and methods which format specific object types.
 | 
						|
 | 
						|
 | 
						|
\begin{memberdesc}{maxlevel}
 | 
						|
  Depth limit on the creation of recursive representations.  The
 | 
						|
  default is \code{6}.
 | 
						|
\end{memberdesc}
 | 
						|
 | 
						|
\begin{memberdesc}{maxdict}
 | 
						|
\memberline{maxlist}
 | 
						|
\memberline{maxtuple}
 | 
						|
  Limits on the number of entries represented for the named object
 | 
						|
  type.  The default for \member{maxdict} is \code{4}, for the others, 
 | 
						|
  \code{6}.
 | 
						|
\end{memberdesc}
 | 
						|
 | 
						|
\begin{memberdesc}{maxlong}
 | 
						|
  Maximum number of characters in the representation for a long
 | 
						|
  integer.  Digits are dropped from the middle.  The default is
 | 
						|
  \code{40}.
 | 
						|
\end{memberdesc}
 | 
						|
 | 
						|
\begin{memberdesc}{maxstring}
 | 
						|
  Limit on the number of characters in the representation of the
 | 
						|
  string.  Note that the ``normal'' representation of the string is
 | 
						|
  used as the character source: if escape sequences are needed in the
 | 
						|
  representation, these may be mangled when the representation is
 | 
						|
  shortened.  The default is \code{30}.
 | 
						|
\end{memberdesc}
 | 
						|
 | 
						|
\begin{memberdesc}{maxother}
 | 
						|
  This limit is used to control the size of object types for which no
 | 
						|
  specific formatting method is available on the \class{Repr} object.
 | 
						|
  It is applied in a similar manner as \member{maxstring}.  The
 | 
						|
  default is \code{20}.
 | 
						|
\end{memberdesc}
 | 
						|
 | 
						|
\begin{methoddesc}{repr}{obj}
 | 
						|
  The equivalent to the built-in \function{repr()} that uses the
 | 
						|
  formatting imposed by the instance.
 | 
						|
\end{methoddesc}
 | 
						|
 | 
						|
\begin{methoddesc}{repr1}{obj, level}
 | 
						|
  Recursive implementation used by \method{repr()}.  This uses the
 | 
						|
  type of \var{obj} to determine which formatting method to call,
 | 
						|
  passing it \var{obj} and \var{level}.  The type-specific methods
 | 
						|
  should call \method{repr1()} to perform recursive formatting, with
 | 
						|
  \code{\var{level} - 1} for the value of \var{level} in the recursive 
 | 
						|
  call.
 | 
						|
\end{methoddesc}
 | 
						|
 | 
						|
\begin{methoddescni}{repr_\var{type}}{obj, level}
 | 
						|
  Formatting methods for specific types are implemented as methods
 | 
						|
  with a name based on the type name.  In the method name, \var{type}
 | 
						|
  is replaced by
 | 
						|
  \code{string.join(string.split(type(\var{obj}).__name__, '_')}.
 | 
						|
  Dispatch to these methods is handled by \method{repr1()}.
 | 
						|
  Type-specific methods which need to recursively format a value
 | 
						|
  should call \samp{self.repr1(\var{subobj}, \var{level} - 1)}.
 | 
						|
\end{methoddescni}
 | 
						|
 | 
						|
 | 
						|
\subsection{Subclassing Repr Objects \label{subclassing-reprs}}
 | 
						|
 | 
						|
The use of dynamic dispatching by \method{Repr.repr1()} allows
 | 
						|
subclasses of \class{Repr} to add support for additional built-in
 | 
						|
object types or to modify the handling of types already supported.
 | 
						|
This example shows how special support for file objects could be
 | 
						|
added:
 | 
						|
 | 
						|
\begin{verbatim}
 | 
						|
import repr
 | 
						|
import sys
 | 
						|
 | 
						|
class MyRepr(repr.Repr):
 | 
						|
    def repr_file(self, obj, level):
 | 
						|
        if obj.name in ['<stdin>', '<stdout>', '<stderr>']:
 | 
						|
            return obj.name
 | 
						|
        else:
 | 
						|
            return `obj`
 | 
						|
 | 
						|
aRepr = MyRepr()
 | 
						|
print aRepr.repr(sys.stdin)          # prints '<stdin>'
 | 
						|
\end{verbatim}
 |