summaryrefslogtreecommitdiff
path: root/Doc/library/userdict.rst
diff options
context:
space:
mode:
Diffstat (limited to 'Doc/library/userdict.rst')
-rw-r--r--Doc/library/userdict.rst188
1 files changed, 188 insertions, 0 deletions
diff --git a/Doc/library/userdict.rst b/Doc/library/userdict.rst
new file mode 100644
index 0000000000..11d46ed109
--- /dev/null
+++ b/Doc/library/userdict.rst
@@ -0,0 +1,188 @@
+
+:mod:`UserDict` --- Class wrapper for dictionary objects
+========================================================
+
+.. module:: UserDict
+ :synopsis: Class wrapper for dictionary objects.
+
+
+The module defines a mixin, :class:`DictMixin`, defining all dictionary methods
+for classes that already have a minimum mapping interface. This greatly
+simplifies writing classes that need to be substitutable for dictionaries (such
+as the shelve module).
+
+This also module defines a class, :class:`UserDict`, that acts as a wrapper
+around dictionary objects. The need for this class has been largely supplanted
+by the ability to subclass directly from :class:`dict` (a feature that became
+available starting with Python version 2.2). Prior to the introduction of
+:class:`dict`, the :class:`UserDict` class was used to create dictionary-like
+sub-classes that obtained new behaviors by overriding existing methods or adding
+new ones.
+
+The :mod:`UserDict` module defines the :class:`UserDict` class and
+:class:`DictMixin`:
+
+
+.. class:: UserDict([initialdata])
+
+ Class that simulates a dictionary. The instance's contents are kept in a
+ regular dictionary, which is accessible via the :attr:`data` attribute of
+ :class:`UserDict` instances. If *initialdata* is provided, :attr:`data` is
+ initialized with its contents; note that a reference to *initialdata* will not
+ be kept, allowing it be used for other purposes.
+
+ .. note::
+
+ For backward compatibility, instances of :class:`UserDict` are not iterable.
+
+
+.. class:: IterableUserDict([initialdata])
+
+ Subclass of :class:`UserDict` that supports direct iteration (e.g. ``for key in
+ myDict``).
+
+In addition to supporting the methods and operations of mappings (see section
+:ref:`typesmapping`), :class:`UserDict` and :class:`IterableUserDict` instances
+provide the following attribute:
+
+
+.. attribute:: IterableUserDict.data
+
+ A real dictionary used to store the contents of the :class:`UserDict` class.
+
+
+.. class:: DictMixin()
+
+ Mixin defining all dictionary methods for classes that already have a minimum
+ dictionary interface including :meth:`__getitem__`, :meth:`__setitem__`,
+ :meth:`__delitem__`, and :meth:`keys`.
+
+ This mixin should be used as a superclass. Adding each of the above methods
+ adds progressively more functionality. For instance, defining all but
+ :meth:`__delitem__` will preclude only :meth:`pop` and :meth:`popitem` from the
+ full interface.
+
+ In addition to the four base methods, progressively more efficiency comes with
+ defining :meth:`__contains__`, :meth:`__iter__`, and :meth:`iteritems`.
+
+ Since the mixin has no knowledge of the subclass constructor, it does not define
+ :meth:`__init__` or :meth:`copy`.
+
+
+:mod:`UserList` --- Class wrapper for list objects
+==================================================
+
+.. module:: UserList
+ :synopsis: 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 :mod:`UserList` module defines the :class:`UserList` class:
+
+
+.. class:: UserList([list])
+
+ Class that simulates a list. The instance's contents are kept in a regular
+ list, which is accessible via the :attr:`data` attribute of :class:`UserList`
+ instances. The instance's contents are initially set to a copy of *list*,
+ defaulting to the empty list ``[]``. *list* can be any iterable, e.g. a
+ real Python list or a :class:`UserList` object.
+
+In addition to supporting the methods and operations of mutable sequences (see
+section :ref:`typesseq`), :class:`UserList` instances provide the following
+attribute:
+
+
+.. attribute:: UserList.data
+
+ A real Python list object used to store the contents of the :class:`UserList`
+ class.
+
+**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:: 2.0
+ Python versions 1.5.2 and 1.6 also required that the constructor be callable
+ with no parameters, and offer a mutable :attr:`data` attribute. Earlier
+ versions of Python did not attempt to create instances of the derived class.
+
+
+:mod:`UserString` --- Class wrapper for string objects
+======================================================
+
+.. module:: UserString
+ :synopsis: 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 :mod:`UserString` module defines the following classes:
+
+
+.. class:: UserString([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 :attr:`data` attribute of :class:`UserString` instances. The
+ instance's contents are initially set to a copy of *sequence*. *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 :func:`str` function.
+
+
+.. class:: MutableString([sequence])
+
+ This class is derived from the :class:`UserString` above and redefines strings
+ to be *mutable*. Mutable strings can't be used as dictionary keys, because
+ dictionaries require *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 :meth:`__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.
+
+In addition to supporting the methods and operations of string and Unicode
+objects (see section :ref:`string-methods`), :class:`UserString` instances
+provide the following attribute:
+
+
+.. attribute:: MutableString.data
+
+ A real Python string or Unicode object used to store the content of the
+ :class:`UserString` class.
+