code: def merge(cls, *args, **kwargs):
          newkeys = bool(kwargs.get('newkeys', False))
          ignore = kwargs.get('ignore', list())
          if len(args) < 1:
              raise ValueError('no ents given to Ent.merge()')
          elif not all(isinstance(s, Ent) for s in args):
              raise ValueError('all positional arguments to Ent.merge() must '
                               'be instances of Ent')
          ent = args[0]
          data = cls.load(ent)
          for ent in args[1:]:
              for key, value in ent.__dict__.items():
                  if key in ignore:
                      continue
                  if key in data.__dict__:
                      v1 = data.__dict__[key]
                      if type(value) == type(v1):
                          if isinstance(v1, Ent):
                              data.__dict__[key] = cls.merge(v1, value, **kwargs)
                          else:
                              data.__dict__[key] = cls.load(value)
                  elif newkeys:
                      data.__dict__[key] = value
          return data