On 9/22/06, Bob Ippolito <[EMAIL PROTECTED]> wrote: > I still haven't seen one that can't be done pretty trivially > with a weakref. Perhaps the solution is to make > doing cleanup-by-weakref easier or more obvious?
Possibly, but I've tried, and *I* couldn't come up with any way to use them that was (1) generic enough to put in a module, rather than a recipe (2) easy enough to still be an improvement, and (3) correct. > def __call__(self, object, func, *args, **kw): > def cleanup(ref): > self.refs.remove(ref) > func(*args, **kw) > self.refs.add(weakref.ref(object, cleanup)) Now remember something like Michael Chermside's "simplest" example, where you need to flush before closing. The obvious way is to pass self.close, but it doesn't actually work. Because it is a bound method, it silently makes the object effectively immortal. The "correct" way is to write another function which is basically an awkward copy of self.close. At the moment, I can't think of any *good* way to ensure access to self.resource1 and self.resource2, but not to self. All the workarounds I can come up with make __del__ look pretty good, from a maintenance standpoint. -jJ _______________________________________________ Python-3000 mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com
