del is called when an object is about to be destroyed. Use sparingly — it's unreliable.
1class TempFile:2 def __init__(self, filename):3 self.filename = filename4 self.file = open(filename, "w")56 def write(self, data):7 self.file.write(data)89 def __del__(self):10 # NOT guaranteed to be called!11 self.file.close()12 os.remove(self.filename)13 print(f"Cleaned up {self.filename}")
Problems with del:
Better alternatives:
with statement).1import weakref23class TempFile:4 def __init__(self, filename):5 self.filename = filename6 self.file = open(filename, "w")7 weakref.finalize(self, self._cleanup, filename)89 @staticmethod10 def _cleanup(filename):11 os.remove(filename)