mark florisson, 12.07.2011 12:11:
On 12 July 2011 11:46, Vitja Makarov wrote:
2011/7/12 Stefan Behnel
Vitja Makarov, 12.07.2011 09:46:
About cdef classes: probably it's better to
transform super().method(...) into direct form, e.g. BaseClass.method(self,
...)
Except when it doesn't work. ;)
A
/ \
B C
\ /
D
The MRO here is D-B-A-C. If C unconditionally calls A.method(), A's
implementation will be called twice, as it was already called by B.
http://www.python.org/download/releases/2.2/descrintro/#mro
According to your link mro in the example is DBCA ;)
Totally proves my point. ;)
Is that a problem for cdef classes? Cdef class have only one base, isn't it?
That is irrelevant, if B calls A's method then C's method will be
skipped. If it would use super() it would call C's method, and C's
method would call A's method.
Exactly. So, calling directly into the base classes method implementation
(i.e. issuing a direct C function call) makes a suitable optimisation for
"final" classes, but not for the general case.
Stefan
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel