Certifier for class object.

    :param object value:
        The object to certify.
    :param object kind:
        The type of the model that the value is expected to evaluate to.
    :param bool required:
        Whether the value can be `None`. Defaults to True.
    :raises CertifierTypeError:
        The type is invalid
    :raises CertifierValueError:
        The value is invalid

def certify_object(value, kind=None, required=True):
    """
    Certifier for class object.

    :param object value:
        The object to certify.
    :param object kind:
        The type of the model that the value is expected to evaluate to.
    :param bool required:
        Whether the value can be `None`. Defaults to True.
    :raises CertifierTypeError:
        The type is invalid
    :raises CertifierValueError:
        The value is invalid
    """
    if certify_required(
        value=value,
        required=required,
    ):
        return

    if not isinstance(value, kind):
        try:
            name = value.__class__.__name__
        except:  # noqa # pragma: no cover
            name = type(value).__name__

        try:
            expected = kind.__class__.__name__
        except:  # noqa # pragma: no cover
            expected = type(kind).__name__

        raise CertifierValueError(
            message="Expected object {expected!r}, but got {actual!r}".format(
                expected=expected, actual=name),
            value=value,
            required=required,
        )