Code: Alles auswählen
import weakref
class Cls(object):
_instances = []
def __init__(self):
self._instances.append(weakref.ref(self, self._del_weakref))
@classmethod
def __instances__(cls):
return [inst() for inst in cls._instances if inst() is not None]
@classmethod
def _del_weakref(cls, weak_ref):
del cls._instances[cls._instances.index(weak_ref)], weak_ref

Anmerkung: Nicht in ipython ausprobieren, wahrscheinlich hält ipython selbst noch Referenzen auf das Objekt wenn es gelöscht wird. Zb über _. Ich hatte das Problem, bis ichs im normalen Python Interpreter getestet habe.
Ich glaube, ich werde das aber nicht "produktiv" verwenden und werde das eigentliche Problem anders angehen. Der Weg erscheint mir suboptimal (nicht die Implementation, generell sich Instanzen von einer Klasse zu holen, ist der Funktionsweise eines Singletons irgendwie ähnlich - und mir kommen mit einem Male Zweifel, ob das Konzept nicht unsicher ist, und zwar aus denselben Gründen wie bei __del__..)