Python 3.7 has a fun new thingy called data classes...
And it's really a fascinating tool. A few things I noticed:
Data classes solve a set of problems that have, over and over, shown up in people's Python programs.
Even better: They let you solve these problems easily, and quickly.
The common, simple things you'll want to use data classes for are easy to learn and use. Because it's designed that way.
And the necessarily more complex problems have solutions from data classes that are, necessarily, more complicated... but once you understand that more complex problem being solved, the solution makes sense.
It's hard to think of ways to improve the design of this tool, without losing something important.
The simple uses of data classes are really great. You'll use them a lot.
But data classes give you even more, for free. And to be honest, the typical Python programmer won't be able to grok what that "even more" is yet.
But as you learn Python more deeply... as you get into the "wizard" levels of the language...
You'll realize more and more these extra, "hidden" benefits of data classes.
In other words: this feature grows in value to you, as you grow in your mastery of Python.
As I mentioned, the interface of data classes is quite simple.
Even the more complex parts are straightforward. So you might think the Python code implementing data classes is straightforward.
You'd be so wrong.
Take a look at the source of the "dataclasses" module. The calm, tranquil surface of @dataclass hides furious activity in the underlying code.
There's a great lesson in here about hiding complexity. And the value your software provides when you do.