This article discusses data classes in Python 3.7 and provides an introductory guide for data classes in Python 3.7 and above.
Data Class is a new concept introduced in Python 3.7 version. You can use data classes not only as a knowledge container but also to write boiler-plate code for you and simplify the process of creating classes since it comes with some methods implemented for free. A data class could also be considered as a category typically containing data, but they aren’t limited to that.
Basic Data Classes
The following ways show how a basic data class can be created:
1. Using decorator: They are created using the new @dataclass decorator.
Example:
Python3
from dataclasses import dataclass
@dataclass
class DataClassGFG:
Job: str
Salary: float
DataClassObject = DataClassGFG( "Author" , 50000.00 )
print (DataClassObject)
|
Output:
DataClassGFG(Job=’Author’, Salary=50000.0)
2. Using make_dataclass():
Example:
Python3
from dataclasses import make_dataclass
DataClassGFG = make_dataclass( "DataClassGFG" ,[ "Job" , "Salary" ])
DataClassObject = DataClassGFG( "Author" , 50000.00 )
print (DataClassObject)
|
Output:
DataClassGFG(Job=’Author’, Salary=50000.0)
3. Using namedtuple: Using namedtuple() method from collections. The is just similar to make_dataclass().
Example:
Python3
from collections import namedtuple
DataClassGFG = namedtuple( "DataClassGFG" ,[ "Job" , "Salary" ])
DataClassObject = DataClassGFG( "Author" , 50000.00 )
print (DataClassObject)
|
Output:
DataClassGFG(Job=’Author’, Salary=50000.0)
Immutable Data Classes
One of the defining features of the namedtuple we saw earlier is that it’s immutable i.e., the value of its fields may never change. For several sorts of data classes, this is often an excellent idea to create an immutable class and to achieve this just simply set frozen=True once you create it.
Example:
Python3
from dataclasses import dataclass
@dataclass (frozen = True )
class DataClassGFG:
Job: str
Salary: float
DataClassObject = DataClassGFG( "Author" , 50000.00 )
print (DataClassObject)
DataClassObject.Job = "Writer"
|
Output:
DataClassGFG(Job=’Author’, Salary=50000.0)
Traceback (most recent call last):
File “main.py”, line 17, in <module>
DataClassObject.Job = “Writer”
File “<string>”, line 4, in __setattr__
dataclasses.FrozenInstanceError: cannot assign to field ‘Job’
Flexible Data Classes
We already discussed some methods to make dataclasses and now we’ll study some more advanced features like parameters to a @dataclass decorator. Adding parameters to a dataclass provides us with more control when creating a data class.
Example:
Python3
from dataclasses import dataclass
from typing import List
@dataclass
class DataClassGFG:
Job: str
Salary: float
@dataclass
class GFGJobs:
Jobs: List [DataClassGFG]
DataClassObject1 = DataClassGFG( "Author" , 50000.00 )
DataClassObject2 = DataClassGFG( "Writer" , 40000.00 )
print (DataClassObject1)
print (DataClassObject2)
GFGJobsObject = GFGJobs([DataClassObject1,DataClassObject2])
print (GFGJobsObject)
|
Output:
DataClassGFG(Job=’Author’, Salary=50000.0)
DataClassGFG(Job=’Writer’, Salary=40000.0)
GFGJobs(Jobs=[DataClassGFG(Job=’Author’, Salary=50000.0), DataClassGFG(Job=’Writer’, Salary=40000.0)])
Optimizing Data Classes
For optimizing the data classes we use slots. Slots are often used to make classes faster and use less memory. Data classes don’t have any explicit syntax for working with slots, but the traditional way of making slots works for data classes also.
Example:
Python3
from dataclasses import dataclass
@dataclass
class DataClassGFG:
Job: str
Salary: float
@dataclass
class SlotClassGFG:
__slots__ = [ "Job" , "Salary" ]
Job: str
Salary: float
DataClassObject1 = DataClassGFG( "Author" , 50000.00 )
DataClassObject2 = SlotClassGFG( "Writer" , 40000.00 )
print (DataClassObject1)
print (DataClassObject2)
print (DataClassObject2.__slots__)
|
Output:
DataClassGFG(Job=’Author’, Salary=50000.0)
SlotClassGFG(Job=’Writer’, Salary=40000.0)
[‘Job’, ‘Salary’]
Inheritance
We can simply use the concept of inheritance by creating sub data class of a data class.
Example:
Python3
from dataclasses import dataclass
@dataclass
class DataClassGFG:
Job: str
Salary: float
@dataclass
class SubDataClassGFG(DataClassGFG):
Standard: str = "Top"
Salary: float = 100000.00
DataClassObject1 = DataClassGFG( "Author" , 100000.00 )
DataClassObject2 = DataClassGFG( "Author" , 50000.00 )
print (DataClassObject1)
print (DataClassObject2)
SubDataClassObject = SubDataClassGFG( "Author" )
print (SubDataClassObject)
|
Output:
DataClassGFG(Job=’Author’, Salary=100000.0)
DataClassGFG(Job=’Author’, Salary=50000.0)
SubDataClassGFG(Job=’Author’, Salary=100000.0, Standard=’Top’)
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape,
GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out -
check it out now!
Last Updated :
11 Oct, 2020
Like Article
Save Article