Встречается на собеседованиях • сегодня

Можно ли сделать объект неизменяемым в Python

Да, можно сделать объект неизменяемым в Python. Для этого есть несколько способов:

  1. Использование __slots__ — ограничивает набор атрибутов, но не делает объект полностью неизменяемым.
  2. Переопределение __setattr__ — запрещает изменение атрибутов после создания.
  3. Использование @property — контролирует доступ к атрибутам.
  4. namedtuple или dataclass(frozen=True) — встроенные неизменяемые структуры.

Пример с __setattr__:

python
class Immutable:
    __slots__ = ('value',)  # Ограничиваем атрибуты
    
    def __init__(self, value):
        super().__setattr__('value', value)  # Обход __setattr__
    
    def __setattr__(self, name, value):
        raise AttributeError("Объект неизменяемый")

obj = Immutable(42)
obj.value = 100  # Вызовет AttributeError

Лучший вариант — dataclass(frozen=True):

python
from dataclasses import dataclass

@dataclass(frozen=True)
class Point:
    x: int
    y: int

p = Point(1, 2)
p.x = 3  # Вызовет FrozenInstanceError
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы