Junior — Middle
87
Чӣ гуна метавон синфро амалӣ кард, ки объектҳои он пас аз эҷод кардан тағир дода нашаванд?
Ҷавоб аз 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