def __init__(*args, **kwds): # args[0] -> 'self'
        """
            DictSet() -> new empty dictionary of sets
            DictSet(mapping) -> new dictionary of sets initialized from a
                mapping object's (key, value) pairs.
                Because the values become sets they must be iterable
                
            DictSet(iterable) -> new dictionary of sets initialized as if via:
                d = DictSet()
                for k, v in iterable:
                    d[k] = set(v)
                    
            DictSet(**kwargs) -> new dictionary of sets initialized with the
                name=value pairs in the keyword argument list.
                For example:  DictSet(one=[1], two=[2])
        """
        # passing self with *args ensures that we can use
        # self as keyword for initializing a DictSet
        # Example: DictSet(self='abc', other='efg')

        # call update or complain about having too many arguments
        if len(args) == 1:
            args[0].update({}, **kwds)
            
        elif len(args) == 2:
            args[0].update(args[1], **kwds)

        elif len(args) > 2:
            raise TypeError(
            'DictSet expected at most 1 arguments, got %d' % (len(args) - 1))

            DictSet() -> new empty dictionary of sets
            DictSet(mapping) -> new dictionary of sets initialized from a
                mapping object's (key, value) pairs.
                Because the values become sets they must be iterable
                
            DictSet(iterable) -> new dictionary of sets initialized as if via:
                d = DictSet()
                for k, v in iterable:
                    d[k] = set(v)
                    
            DictSet(**kwargs) -> new dictionary of sets initialized with the
                name=value pairs in the keyword argument list.
                For example:  DictSet(one=[1], two=[2])
        
recipes/Python/577702_DictSet__specialized_Pythcontainer_datatype/recipe-577702.py