Как сделать атрибут объекта класса неизменяемым в Python? Предложите хотя бы один способ.

Можно предоставить атрибут как property без setter либо использовать frozen dataclass. Это ограничивает обычное присваивание, но не делает объект абсолютной защитой от изменения.

Короткий ответ

Что ответить на собеседовании

Можно предоставить атрибут как 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 существуют способы обойти такие ограничения, поэтому их рассматривают как контракт программы, а не границу безопасности.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее