def _cmp(self, other):
        """
        Comparator function for two :class:`~pywbem.CIMInstance` objects.

        The comparison is based on some of their public attributes, in
        descending precedence:

        * `classname`
        * `path`
        * `properties`
        * `qualifiers`

        The comparison takes into account any case insensitivities described
        for these attributes.

        The following public attributes are not utilized for the comparison:

        * `property_list`
        """
        if self is other:
            return 0
        try:
            assert isinstance(other, CIMInstance)
        except AssertionError:
            raise TypeError(
                _format("other must be CIMInstance, but is: {0}",
                        type(other)))
        return (cmpname(self.classname, other.classname) or
                cmpitem(self.path, other.path) or
                cmpdict(self.properties, other.properties) or
                cmpdict(self.qualifiers, other.qualifiers))