[Python-3000] PEP: Eliminate __del__

Steven Bethard steven.bethard at gmail.com
Sat May 12 19:03:45 CEST 2007


On 5/7/07, Antoine Pitrou <antoine.pitrou at wengo.com> wrote:
> FWIW and in light of the thread on removing __del__ from the language, I
> just posted Yet Another Recipe for automatic finalization:
> http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/519621
>
> It allows writing a finalizer as a single __finalize__ method, at the
> cost of explicitly calling an enable_finalizer() method with the list of
> attributes to keep alive on the "ghost object".

And here's a version that doesn't lose updates to the finalizer attributes:

    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/519635

It replaces enable_finalizer() with a class attribute __finalattrs__.
>From __finalize__, all class attributes and methods are accessible, as
are any instance attributes specified by __finalattrs__. Guido's
BufferedWriter example looks like::

    class BufferedWriter(Finalized):
        __finalattrs__ = 'buffer', 'raw'
        ...
        def flush(self):
            self.raw.write(self.buffer)
            self.buffer = b""

        def __finalize__(self):
            self.flush()


STeVe
-- 
I'm not *in*-sane. Indeed, I am so far *out* of sane that you appear a
tiny blip on the distant coast of sanity.
        --- Bucky Katt, Get Fuzzy


More information about the Python-3000 mailing list