from . import Observable class ObservableDict(dict, Observable): def __init__(self, obj: dict, parent: Observable = None, key: str = None): dict.__init__(self) Observable.__init__(self, parent, key) for key in obj.keys(): dict.__setitem__(self, key, Observable.create(obj[key], self, key)) def __setitem__(self, key, value): dict.__setitem__(self, key, Observable.create(value, self, key)) Observable.notify(self, [key]) def __delitem__(self, key): super().__delitem__(key) Observable.notify(self, [key]) 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