[PyQt] Monkey-patcing virtual methods with functions: change in behaviour

Hans-Peter Jansen hpj at urpla.net
Thu Oct 29 19:40:06 GMT 2009


On Thursday 29 October 2009, 18:07:33 Giovanni Bajo wrote:
> Hi Phil,
>
> it looks like SIP 4.9 changed behaviour wrt monkey-patching of virtual
> methods. If you use a regular Python function (or a lambda) to do the
> monkey patching, the function is passed 'self' when it's invoked.
>
> This change in behaviour is undocumented among the incompatibilities
> with earlier versions. Moreover, it break existing code in a way that it
> is hard to fix (there is no easy way to grep all occurrences); it is
> also hard to debug because the resulting exception (eg: "function takes
> no argument (1 given)") does not usually have any traceback attached.
> Lastly, it does not match what Python itself does when monkey-patching a
> method with a function; with regular Python objects, the function is not
> passed 'self' when it's invoked as a method.
>
> What's your position on this? Was this change in behaviour a rationale
> choice or just an unwanted regression?

Giovanni, did you really tested sip 4.9? Then you might want to test 4.9.1, 
since it has _a_couple_of_fixes_ with respect of monkey patching.

Pete


More information about the PyQt mailing list