Sobes.tech
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