Advanced Dataclasses
Dataclasses support post-init processing, field metadata, frozen instances, inheritance, and __slots__ for memory efficiency.
Dataclasses support post-init processing, field metadata, frozen instances, inheritance, and __slots__ for memory efficiency.
from dataclasses import dataclass, field, KW_ONLY
from typing import ClassVar
@dataclass(frozen=True, slots=True)
class Point:
x: float; y: float
_registry: ClassVar[list] = []
def distance(self) -> float:
return (self.x**2 + self.y**2) ** 0.5
@dataclass
class Circle:
center: Point
radius: float = field(default=1.0, metadata={"unit": "metres"})
_: KW_ONLY
color: str = "black"
p = Point(3.0, 4.0)
print(p.distance()) # 5.0
frozen=True + slots=True gives you immutable, memory-efficient value objects — great for domain models.