from . import Observable class ObservableDict(dict, Observable): def __init__(self, obj: dict, parent: Observable = None): dict.__init__(self) Observable.__init__(self, parent) for key in obj.keys(): dict.__setitem__(self, key, Observable.create(obj[key], self)) def __setitem__(self, key, value): dict.__setitem__(self, key, Observable.create(value, self)) Observable.notify(self) def __delitem__(self, key): super().__delitem__(key) Observable.notify(self) def copy(self): result = {} for key in self.keys(): if type(self[key]) == ObservableDict or type(self[key]) == ObservableList: result[key] = self[key].copy() else: result[key] = self[key] return result from . import ObservableList