@classmethod
def map(cls, function, source, *otherSources):
    """
    Apply a function to every defined attribute (or item) of a source object.
    Construct an Ens object with attributes of same names, which values are
    results of the applied function.

    If multiple source objects are given, the function must accept that many
    positional arguments and is applied for every attribute which is defined
    for at least one source object. Subsequent arguments of the function are
    values of the attribute of corresponding source objects.

    :param function: the function to be applied
    :type function: callable

    :param source: the source object
    :type source: Ens or dict

    :param *otherSources: other source objects

    :return: the constructed object
    :rtype: Ens
    """
    return cls.__map(function, source, *otherSources)
