Python : Data Class
A data class is a class containing data only, from Python3.7 we can define a data class with the help of decorator
@dataclass, which build the class with the basic functionality like
__eq__ and more special methods.
Let see how to define your data class with the decorator
from dataclasses import dataclass @dataclass class Batch: sku: int name: str qty: int >>> Batch(1, 'desk', 100) Batch(sku=1, name='desk', qty=100)
We can also add the default value to the data class, which works exactly as if we do in the
__init__ method of regular class. As you have noticed in the above we have defined the fields with type hints, which is kind of mandatory thing in the data class, if you do not do it will not take the field in your data class.
@dataclass class Batch: sku: int = 1 name: str = 'desk' qty: int = 100 # if you don't want to explicity type the fields you can use any from typing import Any class AnyBatch: sku: Any name: Any = 'desk' qty: Any = 100
If you want to define mutable default value in data class, it can be done with the help of
field. Field() is used to customize each field in data class, different parameter that can be passed to field are
init, you can check about them over here
from dataclasses import dataclass, field from typing import List @dataclass() class Batch: sku: int name: str qty: int = 0 creator: List[str] = field(default_factory=<function/mutable value>)
Immutable Data Class
we can also define our data class as immutable by setting
frozen=True, which basically means we cannot assign value to the fields after creation
@dataclass(frozen=True) class Batch: sku: int name: str qty: int = 0 >>> b = Batch(12, 'desk', 100) >>> b.qty 100 >>> b.qty = 90 dataclasses.FrozenInstanceError: cannot assign to field 'qty'
Data class saves us from writing boilerplate code, help us to focus on logic, this new feature of Python3.7 is great, so what waiting for go and right some data classes.