tgoop.com/artificial_stupid/233
Last Update:
#python
Что такое DataClass и почему его стоит использовать?
Dataclasses – это классы, предназначенные для хранения данных. Суть в том, чтобы не тратить много времени на написание "лишнего" кода, чтобы получить класс для хранения данных. Нам не нужно писать длинную реализацию, переопределять множество методов и пилить собственную логику некоторых операций, т.к. за нас уже сделали достаточно большую часть работы, дав множество плюшек "из коробки".
Если до датаклассов у нас код выглядел примерно так:class Person():
def __init__(self, first_name, last_name, age, hobby):
self.first_name = first_name
self.last_name = last_name
self.age = age
self.hobby = hobby
То с использованием датаклассов все выглядит чище и красивее:from dataclasses import dataclass
@dataclass
class Person:
first_name: str
last_name: str
age: int
hobby: str
Помимо уменьшения дополнительного кода, у нас есть и дополнительные плюшки, такие как:
1. Поддержка значений по умолчанию;
2. "Красивое" представление объектов при выводе;
3. Простой перевод в кортеж или словарь;
4. Возможность сделать наш объект frozen
, то есть неизменяемым;
5. Возможность настраивать поведение атрибута посредством field и возможность использовать специальный метод __post_init__
для добавления атрибутов уже после инициализации (например, для заполнения атрибута на основе значений других атрибутов);
6. Возможность сравнения атрибутов и сортировки по ним из коробки (то есть нам не надо самим прописывать сравнения).
Стоит отметить, что можно реализовать нечто похожее просто сделав tuple, dict
или отдельный класс. А исторически типичным вариантом такой реализации мог бы служить namedtuple
. Но количество дополнительных "танцев с бубном" при использовании вышеуказанных вариантов сильно большее, чем при использовании DataClass
.
Итого:
Получаем очень удобный способ работы с контейнерами данных в Python, который позволяет писать меньше кода и проще реализовывать полезные для нас операции (сравнение, преобразования после инициализации и т.п.).
BY Artificial stupidity
Share with your friend now:
tgoop.com/artificial_stupid/233