A suggestion for ease of extension in the future: replace `field` parameter `kw_only` with `init_type`. As `field` is expected to be used less than `_: dataclasses.KW_ONLY` and `dataclass(kw_only=True)`, it can afford to be more verbose. On top of that, if you want to add positional-only fields in the future, with your current proposal for keyword-only fields would mean you'd have to add another parameter to `field` (eg `pos_only`). My suggestion is to instead make the parameter to `field` become `init_type`, which accepts an `enum` member (called `FieldInitParamType`, with members `normal` (or `positional_or_keyword`) and `keyword_only` (and in the future, `positional_only`)). This makes the parameter specifically about the type of the parameter for the data-class's `__init__`, and allows for any number of parameter types in the future without having to add new parameters to `field`. Laurie