1 :mod:`UserDict` --- Class wrapper for dictionary objects 2 ======================================================== 3 4 .. module:: UserDict 5 :synopsis: Class wrapper for dictionary objects. 6 7 8 **Source code:** :source:`Lib/UserDict.py` 9 10 -------------- 11 12 The module defines a mixin, :class:`DictMixin`, defining all dictionary methods 13 for classes that already have a minimum mapping interface. This greatly 14 simplifies writing classes that need to be substitutable for dictionaries (such 15 as the shelve module). 16 17 This module also defines a class, :class:`~UserDict.UserDict`, that acts as a wrapper 18 around dictionary objects. The need for this class has been largely supplanted 19 by the ability to subclass directly from :class:`dict` (a feature that became 20 available starting with Python version 2.2). Prior to the introduction of 21 :class:`dict`, the :class:`~UserDict.UserDict` class was used to create dictionary-like 22 sub-classes that obtained new behaviors by overriding existing methods or adding 23 new ones. 24 25 The :mod:`UserDict` module defines the :class:`~UserDict.UserDict` class and 26 :class:`DictMixin`: 27 28 29 .. class:: UserDict([initialdata]) 30 31 Class that simulates a dictionary. The instance's contents are kept in a 32 regular dictionary, which is accessible via the :attr:`data` attribute of 33 :class:`~UserDict.UserDict` instances. If *initialdata* is provided, :attr:`data` is 34 initialized with its contents; note that a reference to *initialdata* will not 35 be kept, allowing it be used for other purposes. 36 37 .. note:: 38 39 For backward compatibility, instances of :class:`~UserDict.UserDict` are not iterable. 40 41 42 .. class:: IterableUserDict([initialdata]) 43 44 Subclass of :class:`~UserDict.UserDict` that supports direct iteration (e.g. ``for key in 45 myDict``). 46 47 In addition to supporting the methods and operations of mappings (see section 48 :ref:`typesmapping`), :class:`~UserDict.UserDict` and :class:`IterableUserDict` instances 49 provide the following attribute: 50 51 52 .. attribute:: IterableUserDict.data 53 54 A real dictionary used to store the contents of the :class:`~UserDict.UserDict` class. 55 56 57 .. class:: DictMixin() 58 59 Mixin defining all dictionary methods for classes that already have a minimum 60 dictionary interface including :meth:`__getitem__`, :meth:`__setitem__`, 61 :meth:`__delitem__`, and :meth:`keys`. 62 63 This mixin should be used as a superclass. Adding each of the above methods 64 adds progressively more functionality. For instance, defining all but 65 :meth:`__delitem__` will preclude only :meth:`pop` and :meth:`popitem` from the 66 full interface. 67 68 In addition to the four base methods, progressively more efficiency comes with 69 defining :meth:`__contains__`, :meth:`__iter__`, and :meth:`iteritems`. 70 71 Since the mixin has no knowledge of the subclass constructor, it does not define 72 :meth:`__init__` or :meth:`copy`. 73 74 Starting with Python version 2.6, it is recommended to use 75 :class:`collections.MutableMapping` instead of :class:`DictMixin`. 76 77 Note that DictMixin does not implement the :meth:`~dict.viewkeys`, 78 :meth:`~dict.viewvalues`, or :meth:`~dict.viewitems` methods. 79 80 :mod:`UserList` --- Class wrapper for list objects 81 ================================================== 82 83 .. module:: UserList 84 :synopsis: Class wrapper for list objects. 85 86 87 .. note:: 88 89 When Python 2.2 was released, many of the use cases for this class were 90 subsumed by the ability to subclass :class:`list` directly. However, a 91 handful of use cases remain. 92 93 This module provides a list-interface around an underlying data store. By 94 default, that data store is a :class:`list`; however, it can be used to wrap 95 a list-like interface around other objects (such as persistent storage). 96 97 In addition, this class can be mixed-in with built-in classes using multiple 98 inheritance. This can sometimes be useful. For example, you can inherit 99 from :class:`~UserList.UserList` and :class:`str` at the same time. That would not be 100 possible with both a real :class:`list` and a real :class:`str`. 101 102 This module defines a class that acts as a wrapper around list objects. It is a 103 useful base class for your own list-like classes, which can inherit from them 104 and override existing methods or add new ones. In this way one can add new 105 behaviors to lists. 106 107 The :mod:`UserList` module defines the :class:`~UserList.UserList` class: 108 109 110 .. class:: UserList([list]) 111 112 Class that simulates a list. The instance's contents are kept in a regular 113 list, which is accessible via the :attr:`data` attribute of :class:`~UserList.UserList` 114 instances. The instance's contents are initially set to a copy of *list*, 115 defaulting to the empty list ``[]``. *list* can be any iterable, e.g. a 116 real Python list or a :class:`~UserList.UserList` object. 117 118 .. note:: 119 The :class:`~UserList.UserList` class has been moved to the :mod:`collections` 120 module in Python 3. The :term:`2to3` tool will automatically adapt 121 imports when converting your sources to Python 3. 122 123 124 In addition to supporting the methods and operations of mutable sequences (see 125 section :ref:`typesseq`), :class:`~UserList.UserList` instances provide the following 126 attribute: 127 128 129 .. attribute:: UserList.data 130 131 A real Python list object used to store the contents of the :class:`~UserList.UserList` 132 class. 133 134 **Subclassing requirements:** Subclasses of :class:`~UserList.UserList` are expected to 135 offer a constructor which can be called with either no arguments or one 136 argument. List operations which return a new sequence attempt to create an 137 instance of the actual implementation class. To do so, it assumes that the 138 constructor can be called with a single parameter, which is a sequence object 139 used as a data source. 140 141 If a derived class does not wish to comply with this requirement, all of the 142 special methods supported by this class will need to be overridden; please 143 consult the sources for information about the methods which need to be provided 144 in that case. 145 146 .. versionchanged:: 2.0 147 Python versions 1.5.2 and 1.6 also required that the constructor be callable 148 with no parameters, and offer a mutable :attr:`data` attribute. Earlier 149 versions of Python did not attempt to create instances of the derived class. 150 151 152 :mod:`UserString` --- Class wrapper for string objects 153 ====================================================== 154 155 .. module:: UserString 156 :synopsis: Class wrapper for string objects. 157 .. moduleauthor:: Peter Funk <pf (a] artcom-gmbh.de> 158 .. sectionauthor:: Peter Funk <pf (a] artcom-gmbh.de> 159 160 161 .. note:: 162 163 This :class:`~UserString.UserString` class from this module is available for backward 164 compatibility only. If you are writing code that does not need to work with 165 versions of Python earlier than Python 2.2, please consider subclassing directly 166 from the built-in :class:`str` type instead of using :class:`~UserString.UserString` (there 167 is no built-in equivalent to :class:`MutableString`). 168 169 This module defines a class that acts as a wrapper around string objects. It is 170 a useful base class for your own string-like classes, which can inherit from 171 them and override existing methods or add new ones. In this way one can add new 172 behaviors to strings. 173 174 It should be noted that these classes are highly inefficient compared to real 175 string or Unicode objects; this is especially the case for 176 :class:`MutableString`. 177 178 The :mod:`UserString` module defines the following classes: 179 180 181 .. class:: UserString([sequence]) 182 183 Class that simulates a string or a Unicode string object. The instance's 184 content is kept in a regular string or Unicode string object, which is 185 accessible via the :attr:`data` attribute of :class:`~UserString.UserString` instances. The 186 instance's contents are initially set to a copy of *sequence*. *sequence* can 187 be either a regular Python string or Unicode string, an instance of 188 :class:`~UserString.UserString` (or a subclass) or an arbitrary sequence which can be 189 converted into a string using the built-in :func:`str` function. 190 191 .. note:: 192 The :class:`~UserString.UserString` class has been moved to the :mod:`collections` 193 module in Python 3. The :term:`2to3` tool will automatically adapt 194 imports when converting your sources to Python 3. 195 196 197 198 .. class:: MutableString([sequence]) 199 200 This class is derived from the :class:`~UserString.UserString` above and redefines strings 201 to be *mutable*. Mutable strings can't be used as dictionary keys, because 202 dictionaries require *immutable* objects as keys. The main intention of this 203 class is to serve as an educational example for inheritance and necessity to 204 remove (override) the :meth:`__hash__` method in order to trap attempts to use a 205 mutable object as dictionary key, which would be otherwise very error prone and 206 hard to track down. 207 208 .. deprecated:: 2.6 209 The :class:`MutableString` class has been removed in Python 3. 210 211 In addition to supporting the methods and operations of string and Unicode 212 objects (see section :ref:`string-methods`), :class:`~UserString.UserString` instances 213 provide the following attribute: 214 215 216 .. attribute:: MutableString.data 217 218 A real Python string or Unicode object used to store the content of the 219 :class:`~UserString.UserString` class. 220 221