Dictionary from list?
Greg Chapman
glchapman at earthlink.net
Mon Oct 29 14:35:06 EST 2001
More information about the Python-list mailing list
Mon Oct 29 14:35:06 EST 2001
- Previous message (by thread): Dictionary from list?
- Next message (by thread): Dictionary from list?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Mon, 29 Oct 2001 02:58:42 -0500, Guido van Rossum <guido at python.org> wrote: > >If you want a vaguely dictionary-like object, write a class that >doesn't derive from dictionary but implements the mapping protocol; if >you want a base class that implements most of the operations already, >start with UserDict. > >Subclassing a built-in type is appropriate when either (a) you want to >use it in a context where a genuine list/dictionary/file/etc.; or (b) >you want the speed advantage of the built-in type. In both cases you >have to live with some restrictions. Remapping the fundamental >accessors (like __getitem__) is probably not a good idea in either >case. Adding new state and behavior is fine. > >We should document this more clearly and in more detail. > In fact I have a UserDict-like class which implements the behavior I want, and which I will continue to use. Given the new subclasses, it seemed logical to try to convert this class into a dictionary subclass, since the intent is for it to work identically to a dictionary except that it has the additonal property that the order of iteration is defined. My thinking was that as a subclass, I could use it in situation (a), where a genuine dictionary is required. However, I see now that this class is not a subclass of dictionary (since it breaks fundamental aspects of its purported superclass), but an implementation of a subtype of the mapping type implemented by dictionary. So the class can use a dictionary as part of its implementation, but it is not itself a dictionary. I agree that it would be very helpful to have some documentation of what parts of the built-in types should be considered fundamental. By the way, in thinking about situation (a), I was wondering how much of a slow-down would be involved if PyDict_XXX calls were changed to PyMapping_XXX (I'm not advocating that, I was just curious). Anyway, while doing so, I happened to notice the following two macros in abstract.h: #define PyMapping_DelItemString(O,K) PyDict_DelItemString((O),(K)) #define PyMapping_DelItem(O,K) PyDict_DelItem((O),(K)) I assume those are oversights? It seems to me they should delegate to PyObject_DelItem (and PyObject_DelItemString, which will have to be added). Anyway, thanks for your reply, and thanks for Python! --- Greg Chapman
- Previous message (by thread): Dictionary from list?
- Next message (by thread): Dictionary from list?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list