[PyKDE] Changes to Signal/Slot Handling

Phil Thompson phil at riverbankcomputing.co.uk
Sun Dec 10 13:53:39 GMT 2006


On Sunday 10 December 2006 12:05 pm, Giovanni Bajo wrote:
> Phil Thompson wrote:
> >>> lambda functions are now treated slightly differently and can now be
> >>> used as slots.
> >>
> >> Why can't you simply always incref the slot, be it a lambda, a method or
> >> anything else?
> >
> > I don't trust my understanding of the cyclic garbage collector
> > sufficiently well to make what would be a radical change without breaking
> > existing applications. It needs more investigation - but handling lambdas
> > was easy and relatively risk free.
>
> Why handling lambdas is supposed more risk-free than anyting else? lambdas
> can hold an arbitrary number of references with them:
>
> QObject.connect(self.foo, SIGNAL("A"), lambda: self.foo.func(4))
>
> I know you had a special case for methods because you could store a
> "weak-method" (the moral equivalent of a bound method but with a weakref to
> the object); this allows to effectively *not* hold a reference to the
> QObject.
>
> But with lambdas, you're basically allowing any reference to be kept in
> life by the signal connection, including references to QObjects. What can
> be "worse" than that, to require special attention? Surely local functions
> are exactly like lambdas; or any kind of callable.
>
> BTW: are the universal slots traversed by the cyclic GC? That's basically
> all you probably need to do... Because otherwise, even my small example
> above is a loop which is not collectable...

Risk free to existing applications.

Phil




More information about the PyQt mailing list