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