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

Giovanni Bajo rasky at develer.com
Thu Oct 29 17:07:33 GMT 2009


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?

Thanks!
-- 
Giovanni Bajo
Develer S.r.l.
http://www.develer.com




More information about the PyQt mailing list