You cannot assume that __del__
will ever be called – it is not a place to hope that resources are automagically deallocated. If you want to make sure that a (non-memory) resource is released, you should make a release()
or similar method and then call that explicitly (or use it in a context manager as pointed out by Thanatos in comments below).
At the very least you should read the __del__
documentation very closely, and then you should probably not try to use __del__
. (Also refer to the gc.garbage
documentation for other bad things about __del__
)