Добавить в корзинуПозвонить
Найти в Дзене
дата инженеретта

Датаклассы

Наконец-то спустя год дошли руки написать про датаклассы 🌷 Меня спросили на собесе в ламоду, и тогда я про них либо краем уха слышала, либо вообще не слышала. Но точно не использовала. Посмотрим, что с ними можно делать Зачем? Датакласс описывает данные, но без кучи лишних методов. Он сам вместо нас добавит __init__, __repr__, __eq__ по дефолту. Набор методов можем сами менять с помощью флагов Как создать? Чтобы датаклассы заработали, нужно их импорнуть и добавить в виде аннотации: from dataclasses import dataclass @dataclass class SparkParams: """Dataclass для параметров spark-submit команды.""" name: str deploy_mode: str driver_cores: int driver_memory: str executor_cores: int executor_memory: str num_executors: int Готово! Никакие методы добавлять не нужно Как использовать? spark_params = SparkParams("test_app", "cluster", 2, "4g", 4, "32g", 8) Другие фишки Запрещаем менять поля: @dataclass(frozen=True) Задаем дефолтные значения: @dataclass class Team: description: s

Датаклассы

Наконец-то спустя год дошли руки написать про датаклассы 🌷 Меня спросили на собесе в ламоду, и тогда я про них либо краем уха слышала, либо вообще не слышала. Но точно не использовала. Посмотрим, что с ними можно делать

Зачем?

Датакласс описывает данные, но без кучи лишних методов. Он сам вместо нас добавит __init__, __repr__, __eq__ по дефолту. Набор методов можем сами менять с помощью флагов

Как создать?

Чтобы датаклассы заработали, нужно их импорнуть и добавить в виде аннотации:

from dataclasses import dataclass

@dataclass

class SparkParams:

"""Dataclass для параметров spark-submit команды."""

name: str

deploy_mode: str

driver_cores: int

driver_memory: str

executor_cores: int

executor_memory: str

num_executors: int

Готово! Никакие методы добавлять не нужно

Как использовать?

spark_params = SparkParams("test_app", "cluster", 2, "4g", 4, "32g", 8)

Другие фишки

Запрещаем менять поля:

@dataclass(frozen=True)

Задаем дефолтные значения:

@dataclass

class Team:

description: str | None = None

emails: list[str] = field(default_factory=list) # для list/dict/set

Чуть подробнее можно прочитать в короткой статье

@data_engineerette