rendered paste bodyclass DestroyError(Exception): passdef IsDestroyed(obj): try: object.__getattribute__(obj, "_destroyed") return True except AttributeError: return Falseclass DestroyableObject(object): def __getattribute__(self, k): if IsDestroyed(self): raise DestroyError("Reading from a destroyed object.") return object.__getattribute__(self, k) def __setattr__(self, k, v): if IsDestroyed(self): raise DestroyError("Writing to a destroyed object.") object.__setattr__(self, k, v) def __del__(self): if not IsDestroyed(self): raise DestroyError("Deleting a non-destroyed object") def destroy(self): self._destroyed = True