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.
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 dataclass
esto 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
Leíste python.org/dev/peps/pep-0557/#post-init-processing?
– jonrsharpe
5 de julio de 2018 a las 20:03