Sobes.tech
Junior — Middle
80

¿Cómo se puede implementar una clase cuyos objetos no puedan ser modificados después de su creación?

Respuesta de la IA

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