Check

Иммутабельные dataclass-ы и `frozen=True`

Python Senior Яндекс
Как создать неизменяемый `dataclass`? Какие ограничения появляются при `frozen=True` и как при этом реализовать кеширование уже вычисленного значения (memoization) в поле?
Ответы
frozen dataclass и кеш
`@dataclass(frozen=True)` делает экземпляры неизменяемыми: любые попытки присвоить атрибуту новое значение приводят к `FrozenInstanceError`. Для ленивого кеширования можно использовать `object.__setattr__` (обход проверки) и приватное поле: ```python from dataclasses import dataclass, field @dataclass(frozen=True) class User: name: str _slug: str | None = field(default=None, init=False, repr=False) @property def slug(self) -> str: if self._slug is None: value = self.name.lower().replace(' ', '-') object.__setattr__(self, '_slug', value) return self._slug ```