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