2011/7/6 Stefan Behnel <stefan...@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>)" So we only have func_class (that is inside cyfunction object) and first function argument of method to super() I tried to implement super() for cdef classes and it worked. It works very simple: cdef class Foo: def meth(self): super().meth() # is transformed into super(Foo, self) -- vitja. _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel