← Back to Python

All Topics

Advertisement

Learn/Python/Advanced Python

Dataclasses Advanced

Topic: OOP

Advertisement

Introduction

Advanced dataclass features including field options, validators, and conversions.

Field Options

from dataclasses import dataclass, field
from typing import List

@dataclass
class InventoryItem:
    name: str
    price: float
    quantity: int = 0
    tags: List[str] = field(default_factory=list)
    last_updated: datetime = field(default_factory=datetime.now)

# Custom default factory
def default_products():
    return {"default": "value"}

@dataclass
class Store:
    items: dict = field(default_factory=default_products)

Post-Init Validation

from dataclasses import dataclass, field

@dataclass
class Rectangle:
    width: float
    height: float
    _area: float = field(init=False, repr=False)
    
    def __post_init__(self):
        if self.width <= 0 or self.height <= 0:
            raise ValueError("Dimensions must be positive")
        self._area = self.width * self.height
    
    @property
    def area(self):
        return self._area

Slots with Dataclasses

@dataclass(slots=True)
class Point:
    x: float
    y: float

Practice Problems

  1. Add custom field validation
  2. Use slots for memory efficiency
  3. Create computed fields with post_init
  4. Use default_factory for mutable defaults
  5. Implement from_dict classmethod

Advertisement

Advertisement

Need More Practice?

Get personalized Python help from ChatWhole's AI-powered platform.

Get Expert Help →