1 Nov 2007 09:18
Re: [Pyrex] C versus Python access
On Oct 31, 2007, at 4:15 PM, Robert Bradshaw wrote: > On Oct 31, 2007, at 3:37 PM, Greg Ewing wrote: > >> More seriously, it looks like it will fail if the overriding >> method tries to call the inherited method. This will call >> the wrapper, which will pick up the overriding method and >> call it again, leading to infinite recursion. > > Good point. Short of warning people to avoid this flaw, one could > maybe look at the traceback to detect where one was called from, or > perhaps add a dispatcher function (is called by the vtable entry, but > skipped in the wrapper function). Of course this would add an extra > function call so is less than ideal... I'll have to think about this; > do you have any ideas? Thanks for catching this. I ended up making a global flag that you can set right before calling when you want it to skip the dispatching code. I could think of only two instances where one would want this: in the def wrapper itself and when explicitly doing ClassName.foo (self, ...). All works as expected now, and it should still be plenty fast. - Robert
RSS Feed