code: def error(self, instance, value, error_class=None, extra=''):
          
          error_class = error_class or ValidationError
          if not isinstance(value, (list, tuple, np.ndarray)):
              super(Array, self).error(instance, value, error_class, extra)
          if isinstance(value, (list, tuple)):
              val_description = 'A {typ} of length {len}'.format(
                  typ=value.__class__.__name__,
                  len=len(value)
              )
          else:
              val_description = 'An array of shape {shp} and dtype {typ}'.format(
                  shp=value.shape,
                  typ=value.dtype
              )
  
          if instance is None:
              prefix = '{} property'.format(self.__class__.__name__)
          else:
              prefix = "The '{name}' property of a {cls} instance".format(
                  name=self.name,
                  cls=instance.__class__.__name__,
              )
          message = (
              '{prefix} must be {info}. {desc} was specified. {extra}'.format(
                  prefix=prefix,
                  info=self.info,
                  desc=val_description,
                  extra=extra,
              )
          )
          if issubclass(error_class, ValidationError):
              raise error_class(message, 'invalid', self.name, instance)
          raise error_class(message)
docs: Generates a ValueError on setting property to an invalid value