[EMAIL PROTECTED] wrote:
l = Undoable(list) l = [1, 2, 3]
You just rebound l, so it no longer refers to an Undoable, it refers to a list. This design won't work, you need something more like:
l = Undoable([1, 2, 3])
There were a few other pitfalls in your design... Here, try something like this instead:
class SurrogateNotInitedError(exceptions.AttributeError): pass
class Surrogate(object): """ the data is stored in _data
>>> list1 = [0, 1, 2, 3] >>> list2 = [4, 5, 6, 7] >>> surrogate = Surrogate(list1) >>> surrogate.reverse() >>> list1 [3, 2, 1, 0] >>> surrogate._data = list2 >>> surrogate.append(8) >>> list2 [4, 5, 6, 7, 8] """ def __init__(self, data): self._data = data
def __getattr__(self, name): if name == "_data": raise SurrogateNotInitedError, name else: try: return getattr(self._data, name) except SurrogateNotInitedError: raise SurrogateNotInitedError, name
You can modify this to make an UndoableSurrogate with appropriate saving of state. Note the use of __getattr__ instead of __getattribute__. The latter is not needed since there are not any attributes defined on Surrogate instead. -- Michael Hoffman -- http://mail.python.org/mailman/listinfo/python-list