(original) (raw)
Hello,
I'm one of the attrs contributors, and the person who initially wrote the slots functionality there.Date: Sat, 9 Dec 2017 08:52:15 -0500
From: "Eric V. Smith" <eric@trueblade.com>
To: Nathaniel Smith <njs@pobox.com>
Cc: Python Dev <python-dev@python.org>
Subject: Re: \[Python-Dev\] Issues with PEP 526 Variable Notation at the
class level
Message-ID: <f76fa8aa-36f6-9ac7-5789-68e3c0c61e0b@trueblade.com>
Content-Type: text/plain; charset=utf-8; format=flowed
On 12/8/2017 9:14 PM, Nathaniel Smith wrote:
\> On Dec 7, 2017 12:49, "Eric V. Smith" <eric@trueblade.com
\> 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:
\>
\> https://github.com/python-attrs/attrs/pull/260
In the end, it looks like that PR ended up just refactoring things, and
the decision to always return a new class was deferred. I still haven't
finished evaluating exactly what the refactoring does, though.
Eric.
\> 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\_\_.
They have a bunch of test cases that I'll have to review, too.
Eric.
\-