from . import Observable class ObservableList(list, Observable): def __init__(self, lst: list, parent: Observable = None, key: int = None): list.__init__(self) Observable.__init__(self, parent, key) for element in lst: list.append(self, Observable.create(element, self, key)) def __getitem__(self, value): return super().__getitem__(int(value)) def __setitem__(self, key, value): super().__setitem__(key, Observable.create(value, self, key)) Observable.notify(self, [key]) def __delitem__(self, key): super().__delitem__(key) Observable.notify(self, [key]) def append(self, value): key = len(self) obs = Observable.create(value, self, key) super().append(obs) Observable.notify(self, [key]) return obs def __copy__(self): def c(e): if isinstance(e, (ObservableDict, ObservableList)): return e.copy() else: return e return list(map(c, self)) from . import ObservableDict