code: def get(self, obj):
          
          ctor = type(obj)
          if isinstance(obj, (list, ListCollection)):
              if self.has_string:
                  raise TypeError(
                      "MultiFieldSelector has string in list collection context"
                  )
              if self.has_none:
                  tail = self.heads[None]
                  vals = list(self._get(x, tail) for x in obj)
              else:
                  vals = list(
                      self._get(obj[head], tail) for head, tail in
                      self.heads.iteritems()
                  )
              if isinstance(obj, ListCollection):
                  return ctor(values=vals)
              else:
                  return vals
          elif isinstance(obj, (dict, DictCollection)):
              if self.has_none:
                  tail = self.heads[None]
                  return ctor(
                      (k, self._get(v, tail)) for k, v in obj.iteritems()
                  )
              else:
                  return ctor(
                      (head, self._get(obj[head], tail)) for head, tail in
                      self.heads.iteritems() if head in obj
                  )
          else:
              if self.has_int or (self.has_none and self.heads[None] is not all):
                  raise TypeError(
                      "MultiFieldSelector has %s in %s context" % (
                          "int" if self.has_int else "none", ctor.__name__
                      )
                  )
              if self.has_none:
                  return self._get(obj, all)
              else:
                  kwargs = dict()
                  for head, tail in self.heads.iteritems():
                      val = getattr(obj, head, None)
                      if val is not None:
                          kwargs[head] = self._get(val, tail)
                  return ctor(**kwargs)
docs: Creates a copy of the passed object which only contains the parts
          which are pointed to by one of the FieldSelectors that were used to
          construct the MultiFieldSelector.  Can be used to produce 'filtered'
          versions of objects.