[Python-Dev] Design question: call __del__ for cyclical garbage?

Jack Jansen jack@oratrix.nl
Fri, 03 Mar 2000 17:57:54 +0100


The __init__ rule for calling __del__ has me confused. Is this per-class or 
per-object?

I.e. what will happen in the following case:

class Purse:
	def __init__(self):
		self.balance = WithdrawCashFromBank(1000)

	def __del__(self):
		PutCashBackOnBank(self.balance)
		self.balance = 0

class LossyPurse(Purse):
	def __init__(self):
		Purse.__init__(self)
		 raise 'kaboo! kaboo!'

If the new scheme means that the __del__ method of Purse isn't called I think 
I don't like it. In the current scheme I can always program defensively:
	def __del__(self):
		try:
			b = self.balance
			self.balance = 0
		except AttributeError:
			pass
		else:
			PutCashBackOnBank(b)
but in a new scheme with a per-object "__del__ must be called" flag I can't...
--
Jack Jansen             | ++++ stop the execution of Mumia Abu-Jamal ++++
Jack.Jansen@oratrix.com | ++++ if you agree copy these lines to your sig ++++
www.oratrix.nl/~jack    | see http://www.xs4all.nl/~tank/spg-l/sigaction.htm