On Sat, Feb 21, 2015 at 1:44 PM, Cem Karan <cfkar...@gmail.com> wrote:
> In order to inform users that certain bits of state have changed, I require 
> them to register a callback with my code.  The problem is that when I store 
> these callbacks, it naturally creates a strong reference to the objects, 
> which means that if they are deleted without unregistering themselves first, 
> my code will keep the callbacks alive.  Since this could lead to really weird 
> and nasty situations, I would like to store all the callbacks in a WeakSet 
> (https://docs.python.org/3/library/weakref.html#weakref.WeakSet).  That way, 
> my code isn't the reason why the objects are kept alive, and if they are no 
> longer alive, they are automatically removed from the WeakSet, preventing me 
> from accidentally calling them when they are dead.  My question is simple; is 
> this a good design?  If not, why not?  Are there any potential 'gotchas' I 
> should be worried about?
>

No, it's not. I would advise using strong references - if the callback
is a closure, for instance, you need to hang onto it, because there
are unlikely to be any other references to it. If I register a
callback with you, I expect it to be called; I expect, in fact, that
that *will* keep my object alive.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to