[OM] Simplify the Python instantiate API to just return Objects. #5400
+45
−73
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This API previously accepted a Python dataclass as input, and used it as a template to guide the logic to pull fields out of the instantiated Object and build an instance of the requested dataclass.
This allowed the API to be strongly typed, by accepting a dataclass type as input and returning an instance of that dataclass as output. However, this requires the user to specify a-priori what fields should be present in the resulting Object, and this may not always be known.
By simply returning an Object, and adding the appropriate Python conversions to Object's getattr, we can generically return Objects that behave just like the previous dataclasses, without specifying the fields up front. This also avoids rewrapping the Objects in dataclasses.
In the future, we can add back a similar form of type safety when this would be useful, potentially using Protocols similarly to how dataclasses were used as a template before.