The problem with constructs like this one is that it looks nice at first glance, but adds a cognitive load to an ecosystem that already has about "20 ways to do it" for every single problem.
Please don't tell the C++ community that! We really don't want to encourage them.
To someone who uses Python every day, the extra cognitive load of `attr` is more than made up for by all the boilerplate it eliminates. But for beginners, behind-the-scenes magic is a real turn off.
I think that making `attr` an optional library is a fair compromise, but perhaps it would be a good idea to add a note to the library reminding the programmer not to use it if the code is likely end up in the hands of novices.
>To someone who uses Python every day, the extra cognitive load of `attr` is more than made up for by all the boilerplate it eliminates.
That's funny because the first thought I had when reading this was "this does not eliminate nearly enough boilerplate to justify using that much magic".
>But for beginners, behind-the-scenes magic is a real turn off.
It's a turn off for beginners and experts but a turn on for intermediates.
Python is beginning to rival C++ in that respect.