code: def observed(cls, _func):
          
  
          def wrapper(*args, **kwargs):
              self = args[0]
              assert(isinstance(self, Observable))
  
              self._notify_method_before(self, _func.__name__, args, kwargs)
              res = _func(*args, **kwargs)
              self._notify_method_after(self, _func.__name__, res, args, kwargs)
              return res
  
          return wrapper
docs: Decorate methods to be observable. If they are called on an instance
          stored in a property, the model will emit before and after
          notifications.