def get_class_name(obj) ->str:
    """
    Get an arbitrary objects name.

    :param obj: any object
    :return: name of the class of the given object
    """
    return obj.__class__.__name__


def issequence(obj) ->bool:
    """
    Check if an object is a sequence / an iterable.

    .. note::
        Using against `isinstance(obj, collections.Sequence)` yields `False` for some types like `set` and `dict`.

    :param obj: any object
    :return: flag if the object is a sequence / an iterable
    """
    return hasattr(type(obj), '__iter__') and hasattr(type(obj), '__len__')

94f1995d73d9e2a22d3a966619e2b51ed0228e5f
<mask token>

<mask token>


def issequence(obj) ->bool:
    """
    Check if an object is a sequence / an iterable.

    .. note::
        Using against `isinstance(obj, collections.Sequence)` yields `False` for some types like `set` and `dict`.

    :param obj: any object
    :return: flag if the object is a sequence / an iterable
    """
    return hasattr(type(obj), '__iter__') and hasattr(type(obj), '__len__')

def get_class_name(obj) ->str:
    """
    Get an arbitrary objects name.

    :param obj: any object
    :return: name of the class of the given object
    """
    return obj.__class__.__name__


def issequence(obj) ->bool:
    """
    Check if an object is a sequence / an iterable.

    .. note::
        Using against `isinstance(obj, collections.Sequence)` yields `False` for some types like `set` and `dict`.

    :param obj: any object
    :return: flag if the object is a sequence / an iterable
    """
    return hasattr(type(obj), '__iter__') and hasattr(type(obj), '__len__')
