Sobes.tech
Back to questions
Junior — Middle
52

Каким образом можно реализовать класс, объекты которого нельзя изменять после создания?

Answer from AI

sobes.tech AI

Чтобы сделать объекты класса неизменяемыми после создания, можно:

  • Определить все атрибуты как приватные и не предоставлять сеттеры.
  • Использовать свойство @property с только геттером (в Python 3.8+ можно использовать @property без сеттера).
  • Переопределить методы изменения атрибутов, например, __setattr__, чтобы запрещать изменения после инициализации.

Пример:

class ImmutablePoint:
    def __init__(self, x, y):
        super().__setattr__('x', x)
        super().__setattr__('y', y)
        super().__setattr__('_locked', True)

    def __setattr__(self, key, value):
        if hasattr(self, '_locked') and self._locked:
            raise AttributeError(f"Нельзя изменять атрибут '{key}' после создания объекта")
        super().__setattr__(key, value)

p = ImmutablePoint(1, 2)
print(p.x, p.y)  # 1 2
p.x = 10  # вызовет AttributeError