Inicialización de la clase de datos de Python 3

1 minuto de lectura

Avatar de usuario de ICW
ICW

¿Las clases de datos tienen una forma de agregar inicialización adicional además de lo que se proporciona con su inicializador integrado, sin anularlo? Específicamente, quiero verificar algunos valores de una lista de enteros que es uno de los campos en la clase de datos al momento de la inicialización.

Avatar de usuario de ICW
ICW

Como se describe en el clase de datos PEPhay un __post_init__ método, que será lo último llamado por __init__.

from dataclasses import dataclass

@dataclass
class DataClass: 
    some_field: int

    def __post_init__(self):
        print(f"My field is {self.some_field}")

Definiendo esta clase de clase de datos y luego ejecutando lo siguiente:

dc = DataClass(1) # Prints "My field is 1"

inicializaría some_field a 1, y luego ejecutar __post_init__imprimiendo My field is 1.

Esto le permite ejecutar el código después del método de inicialización para realizar cualquier configuración/comprobación adicional que desee realizar.

  • Solo como advertencia, si usa from attr import dataclassesto no funcionaría!

    – Meysam Sadeghi

    22 de febrero a las 9:37

  • ¡Gracias! Traté de redefinir __init__ y me pregunté por qué no se llama y los puntos de interrupción no ayudan 🙂

    – wowkin2

    13 abr a las 17:58

¿Ha sido útil esta solución?