Можно предоставить атрибут как property без setter либо использовать frozen dataclass. Это ограничивает обычное присваивание, но не делает объект абсолютной защитой от изменения.
Как сделать атрибут объекта класса неизменяемым в Python? Предложите хотя бы один способ.
Можно предоставить атрибут как property без setter либо использовать frozen dataclass. Это ограничивает обычное присваивание, но не делает объект абсолютной защитой от изменения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Можно предоставить атрибут как property без setter либо использовать frozen dataclass. Это ограничивает обычное присваивание, но не делает объект абсолютной защитой от изменения.
Пример:
from dataclasses import dataclass
@dataclass(frozen=True)
class Point:
x: int
y: int
Присваивание point.x = 3 вызовет ошибку. Однако frozen — поверхностная неизменяемость: список внутри поля по-прежнему можно менять. Для глубокой неизменяемости выбирайте неизменяемые вложенные структуры. В Python существуют способы обойти такие ограничения, поэтому их рассматривают как контракт программы, а не границу безопасности.