code: def validate(self, reason=True):
          # type: (bool) -> list
          
          self._validation_results = [validator.is_valid(self._value) for validator in getattr(self, '_validators')]
          self._validation_reasons = [validator.get_reason() for validator in getattr(self, '_validators')]
  
          if reason:
              return list(zip(self._validation_results, self._validation_reasons))
          else:
              return self._validation_results
docs: Return the validation results and include an (optional) reason.
  
          If reason keyword is true, the validation is returned for each validation
          the [(<result: bool>, <reason:str>), ...]. If reason is False, only a single list of validation results
          for each configured validator is returned.
  
          :param reason: (optional) switch to indicate if the reason of the validation should be provided
          :type reason: bool
          :return: list of validation results [bool, bool, ...] or
                   a list of validation results, reasons [(bool, str), ...]
          :rtype: list(bool) or list((bool, str))
          :raises Exception: for incorrect validators or incompatible values