(original) (raw)
On Dec 7, 2017 12:49, "Eric V. Smith" <eric@trueblade.com> wrote:
The reason I didn't include it (as @dataclass(slots=True)) is because it has to return a new class, and the rest of the dataclass features just modifies the given class in place. I wanted to maintain that conceptual simplicity. But this might be a reason to abandon that. For what it's worth, attrs does have an @attr.s(slots=True) that returns a new class with \_\_slots\_\_ set.
They actually switched to always returning a new class, regardless of whether slots is set:
You'd have to ask Hynek to get the full rationale, but I believe it was both for consistency with slot classes, and for consistency with regular class definition. For example, type.\_\_new\_\_ actually does different things depending on whether it sees an \_\_eq\_\_ method, so adding a method after the fact led to weird bugs with hashing. That class of bug goes away if you always set up the autogenerated methods and then call type.\_\_new\_\_.
-n