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

Phil Thompson phil at riverbankcomputing.co.uk
Fri Oct 30 16:43:16 GMT 2009


On Thu, 29 Oct 2009 18:07:33 +0100, Giovanni Bajo <rasky at develer.com>
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?

It should behave in the same way as regular Python classes do - which it
does (both for Python v2 and v3) in my tests.

Can you provide me with a test which shows different behavior?

Phil


More information about the PyQt mailing list