Attrs just has the features I need for now. It certainly feel a touch verbose but I’m happy to pay the price.
id: UUID = attr.ib(validator=instance_of(UUID), …other parameters)
If your attribute name is longer or you have other parameters to set, that can be a very long line (or lines) of code that you repeat for every attribute