code: def set(self, key_or_attrs, value=None, unset=False):
          
          if isinstance(key_or_attrs, dict) and value is None:
              attrs = key_or_attrs
              keys = attrs.keys()
              for k in keys:
                  if isinstance(attrs[k], LocalProxy):
                      attrs[k] = attrs[k]._get_current_object()
          else:
              key = key_or_attrs
              if isinstance(value, LocalProxy):
                  value = value._get_current_object()
              attrs = {key: utils.decode(key, value)}
  
          if unset:
              for k in attrs.keys():
                  attrs[k] = operation.Unset()
  
          self.validate(attrs)
  
          self._merge_metadata(attrs)
  
          keys = list(attrs.keys())
          for k in keys:
              v = attrs[k]
              # TODO: Relation
  
              if not isinstance(v, operation.BaseOp):
                  v = operation.Set(v)
  
              self._attributes[k] = v._apply(self._attributes.get(k), self, k)
              if self._attributes[k] == operation._UNSET:
                  del self._attributes[k]
              self._changes[k] = v._merge(self._changes.get(k))
  
          return self
docs: 在当前对象此字段上赋值
  
          :param key_or_attrs: 字段名，或者一个包含 字段名 / 值的 dict
          :type key_or_attrs: string_types or dict
          :param value: 字段值
          :param unset:
          :return: 当前对象，供链式调用