[Cython] adding support for __dict__ in extension types

Stefan Behnel stefan_ml at behnel.de
Mon Sep 26 21:45:19 CEST 2011


Lisandro Dalcin, 28.02.2011 19:45:
> On 28 February 2011 15:09, Robert Bradshaw wrote:
>> On Mon, Feb 28, 2011 at 8:33 AM, Lisandro Dalcin wrote:
>>> Bringing up this old post...
>>>
>>> On 21 June 2010 15:41, Robert Bradshaw 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).
>
> But if the type do have a __dict__, then tp_dictoffset will be filled
> (this is in my patch), and cpdef methods should always go the dict
> lookup... Am I missing something?
>
> Now that you mention it, my patch should include tests for all this.
> I'll work on that.

Has anything come out of this?

I also can't find a ticket for this, although it certainly is a worthy feature.

Stefan


More information about the cython-devel mailing list