def _get_obj_attr(cls, obj, path, pos):
        """Resolve one kwargsql expression for a given object and returns
        its result.

        :param obj: the object to evaluate
        :param path: the list of all kwargsql expression, including those
                     previously evaluated.
        :param int pos: provides index of the expression to evaluate in the
                        `path` parameter.
        """
        field = path[pos]
        if isinstance(obj, (dict, Mapping)):
            return obj[field], pos
        elif isinstance(obj, (list, Sequence)):
            join_operation = cls.SEQUENCE_OPERATIONS.get(field)
            if join_operation is not None:
                return (
                    AnySequenceResult(
                        cls._sequence_map(obj, path[pos + 1:]),
                        join_operation
                    ),
                    len(path) + 1,
                )
            else:
                return obj[int(field)], pos
        else:
            return getattr(obj, field, None), pos
Resolve one kwargsql expression for a given object and returns
        its result.

        :param obj: the object to evaluate
        :param path: the list of all kwargsql expression, including those
                     previously evaluated.
        :param int pos: provides index of the expression to evaluate in the
                        `path` parameter.