[Python-3000] Removing __del__
Bob Ippolito
bob at redivi.com
Sat Sep 23 11:22:07 CEST 2006
On 9/23/06, Giovanni Bajo <rasky at develer.com> wrote:
> Bob Ippolito wrote:
>
> > import weakref
> >
> > class GarbageDisposal:
> > def __init__(self):
> > self.refs = set()
> >
> > def __call__(self, object, func, *args, **kw):
> > def cleanup(ref):
> > self.refs.remove(ref)
> > func(*args, **kw)
> > self.refs.add(weakref.ref(object, cleanup))
> >
> > on_cleanup = GarbageDisposal()
> >
> > class Wrapper:
> > def __init__(self, *args):
> > self.handle = CAPI.init(*args)
> > on_cleanup(self, CAPI.close, self.handle)
> >
> > def foo(self):
> > CAPI.foo(self.handle)
>
> Try with this:
>
> class Wrapper2:
> def __init__(self, *args):
> self.handle = CAPI.init(*args)
>
> def foo(self):
> CAPI.foo(self.handle)
>
> def restart(self):
> self.handle = CAPI.restart(self.handle)
>
> def close(self):
> CAPI.close(self.handle)
> self.handle = None
>
> def __del__(self):
> if self.handle is not None:
> self.close()
I've never seen an API that works like that. Have you?
-bob
More information about the Python-3000
mailing list