Class destruction

Nils Oliver Kröger NO_Kroeger at gmx.de
Wed Aug 22 14:46:26 EDT 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Robert Dailey schrieb:
> Hi,
> 
> I'm wondering where the most appropriate location is to cleanup class
> objects. For example, i have a file handle as an instance attribute in one
> of my classes and I need to call f.close() on it when the class object falls
> out of scope. Any ideas? I've tried __del__() but I don't remember this
> working for some reason. I might try it again later just to be positive.

__del__(self) is the perfectly right place for such cleanup ... it gets
called once your instance is either deleted explicitly by you or it's
handled by the garbage collector when there are no more references.

The possible problem why this did not work four you is, that the
destruction by the garbage collector cannot be predicted ... it may well
take some time. If you try to open the same file from another class
before yours gets cleaned you run into trouble.

If you want to "reuse" the file, you will have to delete your classes
instance explicitly using the del statement ... this will also call the
destructor.

The below code works fine:

    def __del__( self ):
        self._file.close()
        print "File closed"

Hope that helps ... Nils
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFGzISBzvGJy8WEGTcRAiOwAJ94fJza4/GVQsFmbXwsP8kdvQjV5wCfQktw
F/zPJAw0ayjYe5MGxPR1YqI=
=4Hl6
-----END PGP SIGNATURE-----



More information about the Python-list mailing list