> So I'd rather not mention __missing__ in the first paragraph, which > describes the functionality provided *by* the defaultdict class. How > about adding this para at the end: > > defaultdict is defined using functionality that is available to *any* > subclass of dict: a missing-key lookup automatically causes the > subclass's __missing__ method to be called, with the non-existent key > as its argument. The method's return value becomes the result of the > lookup.
Your proposal sounds like a good idea. By the way do you have a CS degree? Your wording sounds like you are used write theses on a CS degree level. No offense. ;) > BTW, I couldn't *find* the coding of defaultdict in the Python 2.6 > library. File collections.py contains this code: > > from _abcoll import * > import _abcoll > __all__ += _abcoll.__all__ > > from _collections import deque, defaultdict defaultdict is implemented in C. You can read up the source code at http://svn.python.org/view/python/trunk/Modules/_collectionsmodule.c?revision=81029&view=markup . Search for "defaultdict type". The C code isn't complicated. You should understand the concept even if you are not familiar with the C API of Python. > class defaultdict(dict): > def __init__(self, factory, *args, **kwargs): > dict.__init__(self, *args, **kwargs) > self.default_factory = factory > > def __missing__(self, key): > """provide value for missing key""" > value = self.default_factory() # call factory with no args > self[key] = value > return value The type also implements __repr__(), copy() and __reduce__(). The latter is used by the pickle protocol. Without a new __reduce__ method, the default_factory would no survive a pickle/unpickle cycle. For a pure Python implementation you'd have to add __slots__ = "default_factory", too. Otherwise every defaultdict instance would gain an unncessary __dict__ attribute, too. Christian -- http://mail.python.org/mailman/listinfo/python-list