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
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel