does python have useless destructors?
Roy Smith
roy at panix.com
Fri Jun 11 08:06:04 EDT 2004
dkturner at telkomsa.net (David Turner) wrote:
> 1. Objects of classes that declare a __del__ method shall be referred
> to as "deterministic" objects. Such objects shall have a reference
> count associated with. The reference count shall be incremented
> atomically each time an additional reference to the object is created.
> The reference count shall be decremented each time a name referring
> to the object is deleted explicitly. Except in the situation
> described in (2) below, the reference count shall be decremented each
> time a name referring to the object becomes inaccessible due to the
> set of locals to which the name belongs becoming inaccessible.
> [...]
> 3. When the reference count of a deterministic object reaches zero,
> the __del__ method of the object shall be called.
What if you do this...
class Top:
def __init__ (self):
self.bottom = Bottom ()
class Bottom:
def __del__ (self):
do something really important
top = Top ()
del top
The problem here is that while Bottom.__del__ will get called as soon at
top releases it's reference, there's nothing to guarantee that the
reference will disappear until top is garbage collected. You could fix
that by writing Top.__del__, but that assumes Top is a class you have
control of (it might be something out of a library).
Or am I not understanding the situation right?
More information about the Python-list
mailing list