Distinguish between different widgets of the same type

The correct practice is actually to use $args['before_widget] and $args['after_widget'] to handle the id, class, and anything else. In pseudo code:

class My_Widget extends WP_Widget {
    function My_Widget() {

        //basic widget settings.
        $widget_ops = array(
            'classname'   => 'my-name',
            'description' => 'This is the description'
        );

        //widget control settings.
        $control_ops = array(
            'id_base' => 'my-name-widget'
        );

        //create widget
        $this->WP_Widget( 'my-name-widget', 'Widget Title', $widget_ops, $control_ops );

    }
    function widget( $args, $instance ) {

        // split $args
        extract( $args );

        /* Our variables from the widget settings. */
        $title = apply_filters( 'widget_title', $instance['title'] );
        //apply any additional settings here

        /* Before widget (defined by themes). */
        echo $before_widget;

        /* Display the widget title if one was input (before and after defined by themes). */
        if( $title )
            echo $before_title . $title . $after_title;

        // do all the widget output

        /* After widget (defined by themes). */
        echo $after_widget;
    }
}

If you’re still a bit confused, print_r() $args and you’ll see what all you have available to you. If you’re STILL confused, Justin Tadlock has a great guide that will get you going in the right direction.

It’s important that you use $before_widget and $after_widget because if someone were to register the widgets with <li>s and you had hardcoded <divs>, they would pretty quickly either become frustrated, or just move away from your code altogether.