This provides us the feature that users can pass key-value pairs and they will be used as attributes
in the object being created.

As you might have noticed there is no checking here if the keys the user has passed in the constructor are the really the field-names
we are expecting. Nor is there any constraints on the values passed to the constructor.