Package Products :: Package ZenUtils :: Module observable
[hide private]
[frames] | no frames]

Module observable

source code


The observable module provides an interface and an optional mixin class that
provide an Observer pattern for attribute based change notifications of an 
object.

An object that is Observable (i.e. provides the IObservable interface) will
allow attribute observers, a.k.a. listeners, to be attached or detached for
specific attribute names. These observers will be notified whenever the 
specified attribute changes value.

Observers can be any Python object that is callable.

An example of using the observer pattern in your implementation is:


class MyObject(MyParentClass, ObservableMixin):
    def __init__(self):
        super(MyObject, self).__init__()
        self.name = "Super Duper Object"
        self.age = 42

    def doIt(self):
        self.name = "I changed my name!"
        self.age = 37

def ageListener(observable, attrName, oldValue, newValue):
    print "Age has been changed from %d to %d" % (oldValue, newValue)

foo = MyObject()
foo.attachAttributeObserver("age", ageListener)
foo.doIt()


This implementation will likely only work with new style classes that have been
properly implemented.

Classes [hide private]
IObservable
Classes that implement the IObservable interface agree to provide the Observer pattern for object attribute changes.
ObservableMixin
A mixin class that provides an implementation of the IObservable interface for any new-style class to use.