On Friday 28 October 2005 3:05 pm, Giovanni Bajo wrote: > Phil: > >>> import qt > >>> a = qt.QWidget.acceptDrops > >>> b = qt.QWidget.acceptDrops > >>> a is b > > False > > >>> id(a), id(b) > > (9674384, 9670704) > > >>> id(qt.QWidget.acceptDrops) > > 9831568 > > >>> id(qt.QWidget.acceptDrops) > > 9831568 > > It looks like these method wrappers are recreated each time I need them (I > believe it has to do with the lazy binding construction, right)? Would it > be possible to change SIP so that it preserves existing methods and reuses > them, or is it too much work?
It is lazy binding related. The normal getattro method is used first (in case the user as manually patched in a method). If the lazy lookup saved the result in the type dictionary, and it was also reimplemented in a sub-type then the super-type version would always be found in preference to the sub-type version in subsequent lookups. One option would be to maintain a separate dictionary of cached lazy lookups and treat then as candidate results to be used if no better result was found further down the class hierachy. Needs more thought. > This would be needed for tools like epydoc. Basically, given an object like > qt.QWidget.acceptDrops, epydoc has no way to find it looking within the > module qt, nor it has a way to understand through inspection that > qt.QWidget.acceptDrops come from qt.pyd (the __module__ attribute contains > None, and __objclass__ does not exist). > > I know this is really a minor issue, but I would like to get it fixed. > Basically, epydoc can't be used altogether on PyQt applications because it > wastes too much time looking for thousands of duplicates of each and every > method of each and every qt class, in each and every module which does > "from qt import *". Ewww. > > Another fix which would be good for me would be to have the __module__ > attribute defined for methods. Probably easier to implement than reusing > method objects? You mean this is another way to solve the same problem? Or it's a different problem? I'll add to the TODO list. Phil _______________________________________________ PyKDE mailing list PyKDE@mats.imk.fraunhofer.de http://mats.imk.fraunhofer.de/mailman/listinfo/pykde