On Sat, Nov 2, 2019 at 6:21 AM R.Wieser <address@not.available> wrote: > > Hello all, > > I've created a class from which I can iterate all its instanciated objects > (using an "instances" list). The problem is that I now cannot seem to > delete an object anymore, AFAIK as a copy of its "self" is still inside the > "instances" list. > > Object in question: > - - - - - - - - - - - - - - - - > class TheObject: > instances = [] > > def __init__(self): > self.instances.append(self) > > def __del__(self): > print("Deleted!") > - - - - - - - - - - - - - - - - > > The question: How can I keep the class iterable, but still have it delete > itself when asked. >
Have a method to explicitly purge the instance. The "del" statement does NOT request that the object be deleted; it simply unbinds the name. Instead, try something like this: class TheObject: instances = [] def __init__(self): self.active = True self.instances.append(self) def destroy(self): if not self.active: return self.active = False # wipe any attributes you need to self.instances.remove(self) Then, instead of "del some_object", use "some_object.destroy()". You can also use weak references if you need to, but this technique is going to be a lot more reliable and dependable than something based on weakrefs. ChrisA -- https://mail.python.org/mailman/listinfo/python-list