\section{\module{UserDict} ---
         Class wrapper for dictionary objects}

\declaremodule{standard}{UserDict}
\modulesynopsis{Class wrapper for dictionary objects.}

\note{This module is available for backward compatibility only.  If
you are writing code that does not need to work with versions of
Python earlier than Python 2.2, please consider subclassing directly
from the built-in \class{dictionary} type.}

This module defines a class that acts as a wrapper around
dictionary objects.  It is a useful base class for
your own dictionary-like classes, which can inherit from
them and override existing methods or add new ones.  In this way one
can add new behaviors to dictionaries.

The \module{UserDict} module defines the \class{UserDict} class:

\begin{classdesc}{UserDict}{\optional{initialdata}}
Class that simulates a dictionary.  The instance's
contents are kept in a regular dictionary, which is accessible via the
\member{data} attribute of \class{UserDict} instances.  If
\var{initialdata} is provided, \member{data} is initialized with its
contents; note that a reference to \var{initialdata} will not be kept, 
allowing it be used used for other purposes.
\end{classdesc}

In addition to supporting the methods and operations of mappings (see
section \ref{typesmapping}), \class{UserDict} instances provide the
following attribute:

\begin{memberdesc}{data}
A real dictionary used to store the contents of the \class{UserDict}
class.
\end{memberdesc}


\section{\module{UserList} ---
         Class wrapper for list objects}

\declaremodule{standard}{UserList}
\modulesynopsis{Class wrapper for list objects.}


\note{This module is available for backward compatibility only.  If
you are writing code that does not need to work with versions of
Python earlier than Python 2.2, please consider subclassing directly
from the built-in \class{list} type.}

This module defines a class that acts as a wrapper around
list objects.  It is a useful base class for
your own list-like classes, which can inherit from
them and override existing methods or add new ones.  In this way one
can add new behaviors to lists.

The \module{UserList} module defines the \class{UserList} class:

\begin{classdesc}{UserList}{\optional{list}}
Class that simulates a list.  The instance's
contents are kept in a regular list, which is accessible via the
\member{data} attribute of \class{UserList} instances.  The instance's
contents are initially set to a copy of \var{list}, defaulting to the
empty list \code{[]}.  \var{list} can be either a regular Python list,
or an instance of \class{UserList} (or a subclass).
\end{classdesc}

In addition to supporting the methods and operations of mutable
sequences (see section \ref{typesseq}), \class{UserList} instances
provide the following attribute:

\begin{memberdesc}{data}
A real Python list object used to store the contents of the
\class{UserList} class.
\end{memberdesc}

\strong{Subclassing requirements:}
Subclasses of \class{UserList} are expect to offer a constructor which
can be called with either no arguments or one argument.  List
operations which return a new sequence attempt to create an instance
of the actual implementation class.  To do so, it assumes that the
constructor can be called with a single parameter, which is a sequence
object used as a data source.

If a derived class does not wish to comply with this requirement, all
of the special methods supported by this class will need to be
overridden; please consult the sources for information about the
methods which need to be provided in that case.

\versionchanged[Python versions 1.5.2 and 1.6 also required that the
                constructor be callable with no parameters, and offer
                a mutable \member{data} attribute.  Earlier versions
                of Python did not attempt to create instances of the
                derived class]{2.0}


\section{\module{UserString} ---
         Class wrapper for string objects}

\declaremodule{standard}{UserString}
\modulesynopsis{Class wrapper for string objects.}
\moduleauthor{Peter Funk}{pf@artcom-gmbh.de}
\sectionauthor{Peter Funk}{pf@artcom-gmbh.de}

\note{This \class{UserString} class from this module is available for
backward compatibility only.  If you are writing code that does not
need to work with versions of Python earlier than Python 2.2, please
consider subclassing directly from the built-in \class{str} type
instead of using \class{UserString} (there is no built-in equivalent
to \class{MutableString}).}

This module defines a class that acts as a wrapper around string
objects.  It is a useful base class for your own string-like classes,
which can inherit from them and override existing methods or add new
ones.  In this way one can add new behaviors to strings.

It should be noted that these classes are highly inefficient compared
to real string or Unicode objects; this is especially the case for
\class{MutableString}.

The \module{UserString} module defines the following classes:

\begin{classdesc}{UserString}{\optional{sequence}}
Class that simulates a string or a Unicode string
object.  The instance's content is kept in a regular string or Unicode
string object, which is accessible via the \member{data} attribute of
\class{UserString} instances.  The instance's contents are initially
set to a copy of \var{sequence}.  \var{sequence} can be either a
regular Python string or Unicode string, an instance of
\class{UserString} (or a subclass) or an arbitrary sequence which can
be converted into a string using the built-in \function{str()} function.
\end{classdesc}

\begin{classdesc}{MutableString}{\optional{sequence}}
This class is derived from the \class{UserString} above and redefines
strings to be \emph{mutable}.  Mutable strings can't be used as
dictionary keys, because dictionaries require \emph{immutable} objects as
keys.  The main intention of this class is to serve as an educational
example for inheritance and necessity to remove (override) the
\method{__hash__()} method in order to trap attempts to use a
mutable object as dictionary key, which would be otherwise very
error prone and hard to track down.
\end{classdesc}

In addition to supporting the methods and operations of string and
Unicode objects (see section \ref{string-methods}, ``String
Methods''), \class{UserString} instances provide the following
attribute:

\begin{memberdesc}{data}
A real Python string or Unicode object used to store the content of the
\class{UserString} class.
\end{memberdesc}
