Sobes.tech
Back to questions
Junior — Middle
70

Возможно ли создать в Python объект, который нельзя было бы изменить после его инициализации?

Answer from AI

sobes.tech AI

В Python можно создать неизменяемый (immutable) объект несколькими способами. Самый простой — использовать встроенные неизменяемые типы, например, кортежи или строки. Для своих классов можно использовать:

  • namedtuple из модуля collections, который создаёт неизменяемые объекты с именованными полями.
  • @dataclass(frozen=True) из модуля dataclasses (Python 3.7+), который делает экземпляры класса неизменяемыми.
  • Переопределить методы класса так, чтобы запрещать изменение атрибутов после инициализации.

Пример с dataclass:

from dataclasses import dataclass

@dataclass(frozen=True)
class Point:
    x: int
    y: int

p = Point(1, 2)
# p.x = 3  # вызовет ошибку: cannot assign to field 'x'

Таким образом, после создания объекта его поля нельзя изменить.