[Python-Dev] PyDict_Get/SetItem and dict subclasses (original) (raw)
Raymond Hettinger raymond.hettinger at gmail.com
Mon Nov 7 06:51:33 CET 2011
- Previous message: [Python-Dev] PyDict_Get/SetItem and dict subclasses
- Next message: [Python-Dev] Why does _PyUnicode_FromId return a new reference?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Nov 6, 2011, at 1:26 PM, Martin v. Löwis wrote:
Am 06.11.2011 17:39, schrieb Antoine Pitrou:
Le 05/11/2011 17:34, Éric Araujo a écrit :
Hi Victor,
PyDictGetItem() and PyDictSetItem() don't call getitem and setitem for dict subclasses. Is there a reason for that? http://bugs.python.org/issue10977 “Currently, the concrete object C API bypasses any methods defined on subclasses of builtin types.” I think that's the correct behaviour. If you expect to get an arbitrary mapping, just use the abstract API. You should use PyDictGetItem when you know the object is exactly a dict (generally because you have created it yourself, or you know at least where and how it was created). If anybody has spare time at their hands, they should go through the code base and eliminate all uses of concrete API where it's not certain that the object really is of the base class (unless I missed that somebody already did, and that any remaining occurrences would be just minor bugs).
Also check uses of PyList_SetItem and other uses of the concrete API.
Raymond
- Previous message: [Python-Dev] PyDict_Get/SetItem and dict subclasses
- Next message: [Python-Dev] Why does _PyUnicode_FromId return a new reference?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]