[Cython] adding support for __dict__ in extension types

Robert Bradshaw robertwb at math.washington.edu
Mon Feb 28 19:09:34 CET 2011


On Mon, Feb 28, 2011 at 8:33 AM, Lisandro Dalcin <dalcinl at gmail.com> wrote:
> Bringing up this old post...
>
> On 21 June 2010 15:41, Robert Bradshaw <robertwb at math.washington.edu> wrote:
>> On Jun 17, 2010, at 9:31 AM, Lisandro Dalcin wrote:
>>
>>> If we special case a __dict__ attribute in extension types, i.e:
>>>
>>> cdef class Foo:
>>>    cdef dict __dict__
>>>
>>> and fill type->tp_dictoffset, then we can support __dict__ in
>>> extension types.
>>>
>>> What do you think?
>>
>> Sounds like a good idea to me. Note that we check tp_dictoffset for
>> fast dispatching for cpdef methods (which would be correct as a dict
>> lookup *would* be needed if __dict__ is available).
>>
>
> I still have this patch lying around in my disk. I remember Stefan had
> some objections. For example, when the user ask for __dict__, a new
> dict is unconditionally created (in CPython, type dict are allocated
> on-demand).  I propose to get this patch pushed now, and optimize
> later (however, I really don't know how to safely implement this
> optimization).

Note there's also the issue of cpdef methods--if the instance has a
__dict__ then a dict lookup must be performed for every method call
(to make sure it's not overridden).

- Robert


More information about the cython-devel mailing list