2011/7/12 Stefan Behnel <stefan...@behnel.de>: > 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. >
Ohh, I got it. -- vitja. _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel