Intro
This tutorial will teach you about Python data-classes. They operate similar to C# record’s.
Requirements
- Python 3.7 or later
- Know basics of Python 3 if not read here
- Know Python 3 objects if not read here
- Knowledge of Python 3 typing module will help
- Knowledge of Python 3 decorators will help
What are they?
Data Classes in Python allows for adding special methods like __init__
and __repr__
to a class decorated with the @dataclass
decorator.
Creating
Before we create a data-class we will first need to import it from the Python standard library. After it has been imported we can simply place the decorator above a class.
After a class has been decorated we just need to define some properties. This can be seen in the code below.
In this code we are creating two user objects, as you can see as well as passing arguments by position we can also pass them by key. We can also set defaults this has been used on the age property where we give it a default value of 0.
|
|
When the code is run we will get the output shown below. As you can see when printed it results in a nicely formatted output, this has been made possible by the automatically generated __repr__
method.
|
|
We can also have a property be another data-class.
Customised Creation
When creating a data-class we can choose which features are enabled, by default (as of Python 3.7) the default will create a __init__
, __repr__
, __eq__
and will not create order methods such as __lt__
.
Disable Repr
In the code example below we are creating the same user class without __repr__
. As you can see we simply call the decorator like we would a normal function and pass in the keyword argument.
|
|
As you can see we don’t get the formatted data
|
|
Freezing
What happens if we wanted to stop the modification of the object once created. Well in Python we can do this, however we have to tell the data-class to freeze the object. This is shown the example below.
This provides protection from accidental modification. But should not be used as a security feature.
|
|
As you can see in the output below when we try to change a value we will get a FrozenInstanceError
raised.
|
|
Converting into dict
Data-classes can come in very handy when working with JSON. To get our class ready for passing into json.dumps
we use the asdict()
function to convert it into a dict.
|
|
Research
There is more functionality in the data-class which is not covered in this tutorial, if you want to learn more go to the official Python docs here.