Nikolaus Rath wrote: > Apparently Python calls the class attribute __del__ rather than the > instance's __del__ attribute. Is that a bug or a feature? Is there any > way to implement the desired functionality without introducing an > additional destroy_has_been_called attribute?
For newstyle classes __special__() methods are always looked up in the class, never in the instance. Your best bet is probably to manage the lifetime of the instance explicitly with try...finally or a context manager: >>> import contextlib >>> class T(object): ... def close(self): ... print "Cleaning up." ... >>> with contextlib.closing(T()) as t: ... print t ... <__main__.T object at 0x7fc50c1e61d0> Cleaning up. Alternatively you can try and cook up something with weakref.ref and a callback. Peter -- http://mail.python.org/mailman/listinfo/python-list