def validate(self, instance, value):
        """Check if value is valid type of instance_class

        If value is an instance of instance_class, it is returned unmodified.
        If value is either (1) a keyword dictionary with valid parameters
        to construct an instance of instance_class or (2) a valid input
        argument to construct instance_class, then a new instance is
        created and returned.
        """
        try:
            if isinstance(value, self.instance_class):
                return value
            if isinstance(value, dict):
                return self.instance_class(**value)
            return self.instance_class(value)
        except GENERIC_ERRORS as err:
            if hasattr(err, 'error_tuples'):
                extra = '({})'.format(' & '.join(
                    err_tup.message for err_tup in err.error_tuples
                ))
            else:
                extra = ''
            self.error(instance, value, extra=extra)
Check if value is valid type of instance_class

        If value is an instance of instance_class, it is returned unmodified.
        If value is either (1) a keyword dictionary with valid parameters
        to construct an instance of instance_class or (2) a valid input
        argument to construct instance_class, then a new instance is
        created and returned.