Dataclasses
Что такое Dataclasses?
Класс без и с Dataclass
Класс без и с Dataclass
Dataclasses
Значения по умолчанию и __post_init__
Когда использовать Dataclasses?
Задачи для практики
74.89K
Category: programmingprogramming

Dataclasses

1. Dataclasses

2. Что такое Dataclasses?

Модуль dataclasses, введённый в Python 3.7.
Декоратор @dataclass для автоматической генерации
стандартных методов.
Упрощает создание классов для хранения данных.
Автоматически добавляет __init__, __repr__, __eq__ и другие
методы.

3. Класс без и с Dataclass

Обычный класс
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person(name={self.name}, age={self.age})"
def __eq__(self, other):
if isinstance(other, Person):
return self.name == other.name and self.age == other.age
return False

4. Класс без и с Dataclass

Dataclass
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int

5. Dataclasses

Автоматическая генерация методов:
__init__, __repr__, __eq__, __hash__.
Параметры декоратора: init, repr, eq, order,
frozen.
Поддержка значений по умолчанию.
Метод __post_init__ для дополнительной
инициализации.

6. Значения по умолчанию и __post_init__

from dataclasses import dataclass
@dataclass
class Product:
name: str
price: float = 0.0
discount: float = 0.0
def __post_init__(self):
self.final_price = self.price * (1 self.discount)
product = Product("Laptop", 1000.0, 0.1)
print(product.final_price) # Вывод: 900.0

7. Когда использовать Dataclasses?

Для классов, предназначенных для хранения
данных (DTO, модели данных).Упрощение кода
при работе с объектами.Замена кортежей,
словарей или именованных
кортежей.Ограничения: Не заменяет сложную
логику в классах.

8. Задачи для практики

1. Создайте dataclass Point с атрибутами x, y и значением по умолчанию
z=0.
2. Реализуйте dataclass Student с полями name, grade и методом
__post_init__ для проверки, что grade в диапазоне 0–100.
3. Создайте dataclass Order с полями items (список) и total с вычисляемым
значением в __post_init__.
4. Реализуйте dataclass Car с параметром frozen=True и попробуйте
изменить атрибут.
5. Создайте dataclass Employee с полем salary и сравнением через
order=True.
6. Реализуйте dataclass Inventory с методом для добавления элементов и
подсчёта их количества.
English     Русский Rules