def is_name_private(name, public=None):
    """
    Answers whether the name is considered private, by checking the leading underscore.

    A ist of public names can be provided which would override the normal check
    """
    if public and name in public:
        return False
    return name.startswith('_')