[Cython] PEP 3135 -- New Super

Stefan Behnel stefan_ml at behnel.de
Wed Jul 6 09:22:07 CEST 2011


Vitja Makarov, 06.07.2011 09:05:
> 2011/7/6 Stefan Behnel<stefan_ml at behnel.de>:
>> 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.
>
> From PEP: "super() is equivalent to: super(__class__,<firstarg>)"

I wasn't speaking of super(). What I meant, was: how do we pass 'self' when 
we pass the CyFunction object as the first argument?

Stefan


More information about the cython-devel mailing list