[Cython] PEP 3135 -- New Super

Stefan Behnel stefan_ml at behnel.de
Wed Jul 6 02:36:32 CEST 2011


Stefan Behnel, 05.07.2011 10:04:
> Vitja Makarov, 05.07.2011 09:17:
>> 2011/7/5 Stefan Behnel:
>>> Vitja Makarov, 05.07.2011 08:21:
>>>> I was thinking about implementing new super() with no arguments.
>>> http://trac.cython.org/cython_trac/ticket/696
>>>
>>>> The problem is where to store __class__, I see two options here:
>>>>
>>>> 1. Add func_class member to CyFunction, this way __class__ will be
>>>> private and not visible for inner functions:
>>>> 2. Put it into closure
>>>
>>> The second option has the advantage of requiring the field only when
>>> super()
>>> is used, whereas the first impacts all functions.
>>>
>>> I would expect that programs commonly have a lot more functions than
>>> specifically methods that use a no-argument call to super(), so this may
>>> make a difference.
>>>
>>
>> So, now classes are created the following way:
>>
>> class_dict = {}
>> class_dict.foo = foo_func
>> class = CreateClass(class_dict)
>>
>> So after class is created I should check its dict for CyFunction
>> members (maybe only ones that actually require __class__)
>> and set __class__:
>>
>> for value in class.__dict__.itervalues():
>> if isinstance(value, CyFunction) and value.func_class is WantClass:
>> value.func_class = class
>>
>> Btw, first way requires cyfunction signature change, it would accept
>> cyfunction object as first argument.
>
> We currently pass the binding (i.e. owning) object, right?

So, how would this work for methods? We need to pass the 'self' object 
there, which the CyFunction doesn't know. If anything, it only knows the 
class it was defined in, which doesn't help here.

Stefan


More information about the cython-devel mailing list