docs: def _children_(self):
          """ get children objects
  
          :rtype: a dict of children {child_name: child_object}
          """
          ret = {}
          names = self._field_names_
  
          def down(name, obj):
              if isinstance(obj, BaseObj):
                  if not isinstance(obj, weakref.ProxyTypes):
                      ret[name] = obj
              elif isinstance(obj, list):
                  for i, v in zip(range(len(obj)), obj):
                      down(jp_compose(str(i), name), v)
              elif isinstance(obj, dict):
                  for k, v in six.iteritems(obj):
                      down(jp_compose(k, name), v)
  
          for n in names:
              down(jp_compose(n), getattr(self, n))
  
          return ret