The problem is that if you have 1 normal parameter and 10 keyword-only ones, you'd be forced to say:
@dataclasses.dataclass class LotsOfFields: a: Any b: Any = field(kw_only=True, default=0) c: Any = field(kw_only=True, default='foo') d: Any = field(kw_only=True) e: Any = field(kw_only=True, default=0.0) f: Any = field(kw_only=True) g: Any = field(kw_only=True, default=()) h: Any = field(kw_only=True, default='bar') i: Any = field(kw_only=True, default=3+4j) j: Any = field(kw_only=True, default=10) k: Any = field(kw_only=True)
That's way too verbose for me.
Why not:
@dataclasses.dataclass(kw_only=True) class LotsOfFields: a: Any = field(kw_only=False) b: Any = 0 c: Any = 'foo' d: Any e: Any = 0.0 f: Any g: Any = () h: Any = 'bar' i: Any = 3+4j j: Any = 10 k: Any
Avoids weirdness with pragma and singletons that make the order of parameters important.