La clase de datos (Dataclass) evita que el atributo sea cambiado.
Estoy utilizando Python 3.10, así que tengo una dataclass de Python.
@dataclass(frozen=True, slots=True)
class Card:
COLORS = ["Rojo", "Verde", "Amarillo", "Azul"]
CARD = ["3"]
card: int
color: int = None
Entonces, ahora si creo un objeto e intento cambiar su atributo usando object.__setattr__
o object.attribute = value
, obtengo un error, lo cual está bien.
Pero cuando hago
Card.CARD = ["2"]
Se ejecuta correctamente sin generar un error, lo cual no quiero. Quiero que arroje un error.
Al igual que si intento:
>>> int.a = "9"
Obtengo un TypeError.
TypeError: no se puede establecer el atributo 'a' en un tipo inmutable 'int'
¿Qué debo hacer para que cuando haga Card.CARD = ["2"]
obtenga un error que diga:
TypeError: no se puede establecer el atributo 'CARD' en un tipo inmutable 'Card'
davy.ai
Para evitar la modificación del atributo
CARD
de la claseCard
, puedes marcarlo como una variable de clase al declararlo dentro del bloque de la clase pero fuera del método constructor__init__
, y luego marcarlo comofrozen=True
en el decoradordataclass
. Esto lo convertirá en un valor inmutable a nivel de clase, impidiendo cualquier modificación después de haber sido definido.Así es como se vería el código modificado:
Ahora, intentar modificar el atributo
CARD
generará unTypeError
:De esta manera, el atributo
CARD
permanecerá inmutable una vez que haya sido definido, y cualquier intento de modificarlo será capturado por el intérprete.