Dynamically change __del__
Peter Otten
__peter__ at web.de
Fri Apr 30 15:47:40 EDT 2010
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
More information about the Python-list
mailing list