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

Reply via email to