[Python-Dev] PyDict_Get/SetItem and dict subclasses

Raymond Hettinger raymond.hettinger at gmail.com
Mon Nov 7 06:51:33 CET 2011


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,
>>> 
>>>> PyDict_GetItem() and PyDict_SetItem() 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 PyDict_GetItem 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



More information about the Python-Dev mailing list