'Add a callback on this object to trigger when ``attr`` changes.
Args:
attr (str) : an attribute name on this object
callback (callable) : a callback function to register
Returns:
None'

def on_change(self, attr, *callbacks):

    if (len(callbacks) == 0):
        raise ValueError('on_change    takes    an    attribute    name    and    one    or    more    callbacks,    got    only    one    parameter')
    _callbacks = self._callbacks.setdefault(attr, [])
    for callback in callbacks:
        if (callback in _callbacks):
            continue
        _check_callback(callback, ('attr', 'old', 'new'))
        _callbacks.append(callback)
