code: def Set(self, value, context=None):
      
      if self.has_error: return
      if self.value is None:
        self.value = value
        self._context["old_value"] = value
        self._context.update({"old_" + k: v for k, v in context.items()})
      elif self.value != value:
        self.has_error = True
        self._context["new_value"] = value
        self._context.update({"new_" + k: v for k, v in context.items()})
docs: Receives a value for the object and some context on its source.