Skip to content

Instantly share code, notes, and snippets.

@xuru
Created December 7, 2012 17:23
Show Gist options
  • Select an option

  • Save xuru/4234833 to your computer and use it in GitHub Desktop.

Select an option

Save xuru/4234833 to your computer and use it in GitHub Desktop.
Using the observer pattern, ObservableDict can be used to monitor changes to the dictionary.
class Observable:
'''Mixin for objects that need to be observed.'''
_observers = None
def observe(self, observer):
if not self._observers:
self._observers = []
self._observers.append(observer)
def removeobserver(self, observer):
if observer in self._observers:
self._observers.remove(observer)
def notify(self, event):
for o in self._observers or ():
o.notify(event)
class ObservableDict(dict, Observable):
def __setitem__(self, key, value ):
dict.__setitem__(self, key, value)
self.notify(("set", key, value))
def __delitem__(self, key):
dict.__delitem__(self, key)
self.notify(("del", key))
def pop(self, key):
v = dict.pop(self, key)
self.notify(("pop", key))
return v
def clear(self):
dict.clear(self)
self.notify(("clear",))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment