Dataclasses Python

Les Dataclasses sont des classes Python, mais adaptées au stockage d’objets de données. Ce module fournit un décorateur et des fonctions pour ajouter automatiquement des méthodes spéciales générées telles que __init__() et __repr__() aux classes définies par l’utilisateur.

Fonctionnalités

  1. Elles stockent des données et représentent un certain type de données. Ex: Un nombre. Pour ceux qui connaissent les ORM, une instance de modèle est un objet de données. Il représente un type d’entité spécifique. Il contient des attributs qui définissent ou représentent l’entité.

  2. Elles peuvent être comparées à d’autres objets du même type. Ex: Un nombre peut être supérieur, inférieur ou égal à un autre nombre.

Python 3.7 fournit un décorateur dataclass qui est utilisé pour convertir une classe en une dataclass.

class Number:
    def __init__(self, val):
        self.val = val

obj = Number(2)
obj.val
2

avec dataclass

# Dataclass : génère automatiquement les méthodes __init__ et __repr__
from dataclasses import dataclass

@dataclass  # Le décorateur convertit la classe en dataclass
class Number:
    val: int  # Annotation de type requise

obj = Number(2)  # __init__ créé automatiquement
obj.val
2

Valeurs par défaut

Il est facile d’ajouter des valeurs par défaut aux champs de votre classe de données.

# Dataclass avec valeurs par défaut : les champs avec des valeurs par défaut doivent suivre les champs requis
@dataclass
class Product:
    name: str        # Champ requis
    count: int = 0   # Champ optionnel avec valeur par défaut
    price: float = 0.0  # Champ optionnel avec valeur par défaut

obj = Product("Python")  # Seul name est requis, les autres utilisent les valeurs par défaut
obj.name
Python
obj.count
0
obj.price
0.0
Quiz

Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage

Dans une dataclass, où les champs avec des valeurs par défaut doivent-ils être placés ?
A. Avant les champs sans valeurs par défaut
B. Après les champs sans valeurs par défaut
C. Cela n'a pas d'importance
D. Dans une section séparée

Annotations de type (Type hints)

Il est obligatoire de définir le type de données dans la dataclass. Cependant, si vous préférez ne pas spécifier le type de données, utilisez typing.Any.

from dataclasses import dataclass
from typing import Any

@dataclass
class WithoutExplicitTypes:
   name: Any
   value: Any = 42

Liens pertinents