Sobes.tech
Junior — Middle
91

Comment peut-on implémenter une classe dont les objets ne peuvent pas être modifiés après leur création?

Réponse de l'IA

sobes.tech IA

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

  • Определить все атрибуты как приватные и не предоставлять сеттеры.
  • Использовать свойство @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