Class which provides formatting services useful in implementing functions
similar to the built-in repr(); size limits for different object types
are added to avoid the generation of representations which are excessively long.

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 30.

Recursive implementation used by repr(). This uses the type of obj to
determine which formatting method to call, passing it obj and level. The
type-specific methods should call repr1() to perform recursive formatting,
with level-1 for the value of level in the recursive call.

Repr.repr_TYPE(obj, level)

Formatting methods for specific types are implemented as methods with a name
based on the type name. In the method name, TYPE is replaced by
string.join(string.split(type(obj).__name__,'_')). Dispatch to these
methods is handled by repr1(). Type-specific methods which need to
recursively format a value should call self.repr1(subobj,level-1).

The use of dynamic dispatching by Repr.repr1() allows subclasses of
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: