code: def merge_dicts(*dicts, **kwargs):
      
      # get or infer the class
      cls = kwargs.get("cls", None)
      if cls is None:
          for d in dicts:
              if isinstance(d, dict):
                  cls = d.__class__
                  break
          else:
              raise TypeError("cannot infer cls as none of the passed objects is of type dict")
  
      # start merging
      merged_dict = cls()
      for d in dicts:
          if isinstance(d, dict):
              merged_dict.update(d)
  
      return merged_dict
docs: merge_dicts(*dicts, cls=None)
      Takes multiple *dicts* and returns a single merged dict. The merging takes place in order of the
      passed dicts and therefore, values of rear objects have precedence in case of field collisions.
      The class of the returned merged dict is configurable via *cls*. If it is *None*, the class is
      inferred from the first dict object in *dicts*.