code: func (o *object) inherit(parents []string) {
  	// save current fields
  	oriFields := o.Fields
  
  	// inherit from parents
  	for _, parent := range parents {
  		obj, ok := objectsRegister[parent]
  		if !ok {
  			fmt.Printf("parent %v not exist in object register\n", parent)
  			continue
  		}
  		for name, f := range obj.FieldsMap() {
  			o.Fields[name] = f
  		}
  	}
  	// restore original fields
  	for name, f := range oriFields {
  		o.Fields[name] = f
  	}
  }
docs: // Multiple inheritance is currently not supported by Nim.
  // see https://nim-lang.org/docs/tut2.html
  // Golang also doesn't support it but we use composition.
  // we can't use composition in Nim because it works differently
  // than Go. We can't use composed type directly in Nim.
  // So, we inherit the properties.