Returning an object with additional fields

An obvious solution along the lines of creating a class corresponding to item' that holds reference to the object of a class corresponding to item exists. Is this a good approach from the standpoint of classic OO school of thought? And also, from the standpoint of OCaml school of thought? Once again, the question is more about correctness than anything else.

  class item' ~id ~sid ~vid item =
    object
      val id = id
      val sid = sid
      val vid = vid
      val item = item
      method present = item#present
    end

That instance could be created in the right context, within the innards of the larger graph, that operates with IDs.

Since the interface to item is relatively uniform, it’s relatively trivial to implement it in the item', by referencing the item. The direct access to fields is sacrificed, but I suppose all relevant operations on the fields could be encapsulated in the item, and that may be even more correct approach from the standpoint of abstraction. What do you think about that?

In principle, if the objects were possible to optimize properly in OCaml — even if it was the matter of inlining only — then we might as well have objects as a default approach to implementing extensible records in OCaml.