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

Phil Thompson phil at riverbankcomputing.com
Fri Oct 30 17:11:28 GMT 2009


On Fri, 30 Oct 2009 16:43:16 +0000, Phil Thompson
<phil at riverbankcomputing.co.uk> wrote:
> 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?

Ahh - hang on, just realised my test is broken...

Phil


More information about the PyQt mailing list