[Cython] adding support for __dict__ in extension types

Lisandro Dalcin dalcinl at gmail.com
Mon Feb 28 19:45:44 CET 2011


On 28 February 2011 15:09, Robert Bradshaw <robertwb at math.washington.edu> wrote:
> 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).
>

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.


-- 
Lisandro Dalcin
---------------
CIMEC (INTEC/CONICET-UNL)
Predio CONICET-Santa Fe
Colectora RN 168 Km 472, Paraje El Pozo
3000 Santa Fe, Argentina
Tel: +54-342-4511594 (ext 1011)
Tel/Fax: +54-342-4511169


More information about the cython-devel mailing list