Sobes.tech
Junior — Middle

De que maneiras em Python se pode impedir a alteração do estado de um objeto após a sua criação?

sobes.tech IA

Resposta da IA

Em Python, para evitar a alteração do estado de um objeto após a sua criação, podem ser utilizados vários métodos:

  1. Utilização de tipos de dados imutáveis — por exemplo, tuplos em vez de listas.

  2. Definir propriedades apenas de leitura usando o decorador @property sem setter:

class PontoImutável:
    def __init__(self, x, y):
        self._x = x
        self._y = y

    @property
    def x(self):
        return self._x

    @property
    def y(self):
        return self._y

p = PontoImutável(1, 2)
print(p.x)  # 1
# p.x = 5  # AttributeError
  1. Uso de __slots__ para limitar a adição dinâmica de atributos.

  2. Criação de classes imutáveis com namedtuple ou dataclasses com o parâmetro frozen=True:

from dataclasses import dataclass

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

p = Ponto(1, 2)
# p.x = 3  # Erro, objeto congelado
  1. Sobrescrever métodos de alteração de estado (por exemplo, __setattr__) para impedir alterações após a inicialização.

Estes métodos ajudam a criar objetos com estado imutável, o que é útil para segurança de dados e aplicações multithread.