0Pricing
Python Academy · Leçon

Valeurs par défaut et field()

Définissez des valeurs par défaut et utilisez les options de field().

Valeurs par défaut et field() est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.

Attribuer des valeurs par défaut aux champs

Comme les paramètres de fonction, les champs d'une classe de données peuvent avoir des valeurs par défaut. Un champ avec une valeur par défaut peut être omis lors de la création d'une instance.

from dataclasses import dataclass

@dataclass
class Server:
    host: str
    port: int = 8080

print(Server('localhost'))
print(Server('example.com', 443))

L'ordre est important

Les champs avec des valeurs par défaut doivent venir après les champs sans valeur par défaut, exactement comme les arguments de fonction. Sinon, Python déclenche une TypeError lors de la définition de la classe.

from dataclasses import dataclass

@dataclass
class User:
    name: str       # required
    active: bool = True   # optional

print(User('Alice'))

Le piège des valeurs par défaut modifiables

Vous ne pouvez pas utiliser directement un objet modifiable, comme une liste ou un dictionnaire, comme valeur par défaut. Toutes les instances partageraient le même objet. Python le détecte et déclenche une ValueError pour vous protéger.

from dataclasses import dataclass
from typing import List

# This raises ValueError at class definition time:
try:
    @dataclass
    class Bad:
        items: List[int] = []
except ValueError as e:
    print('Error:', e)

field(default_factory=...)

Pour fournir une valeur par défaut modifiable, utilisez field(default_factory=...). La fabrique est appelée pour chaque nouvelle instance, de sorte que chaque instance obtient son propre objet vierge.

from dataclasses import dataclass, field
from typing import List

@dataclass
class Cart:
    items: List[str] = field(default_factory=list)

a = Cart()
a.items.append('apple')
b = Cart()
print(a.items, b.items)

default contre default_factory

Utilisez field(default=...) pour les valeurs immuables lorsque vous avez également besoin d'autres options de field(). Utilisez default_factory pour tout ce qui est modifiable. Vous ne pouvez pas transmettre les deux en même temps.

from dataclasses import dataclass, field

@dataclass
class Config:
    retries: int = field(default=3)
    tags: list = field(default_factory=list)

print(Config())

Exclure un champ de repr

L'option repr=False masque un champ dans le __repr__ généré. C'est utile pour les secrets ou les grands tampons internes.

from dataclasses import dataclass, field

@dataclass
class Account:
    user: str
    token: str = field(repr=False, default='secret')

print(Account('alice'))

Exclure un champ de la comparaison

Avec compare=False, un champ est ignoré par le __eq__ généré (ainsi que lors de l'ordonnancement). Deux instances peuvent être égales même si ce champ diffère.

from dataclasses import dataclass, field

@dataclass
class Event:
    name: str
    timestamp: float = field(compare=False, default=0.0)

print(Event('login', 1.0) == Event('login', 99.0))

Champs init=False

Définir init=False exclut un champ de __init__. Vous l'associez généralement à une valeur par défaut ou vous le définissez dans __post_init__.

from dataclasses import dataclass, field

@dataclass
class Circle:
    radius: float
    area: float = field(init=False, default=0.0)

c = Circle(2.0)
print(c)

__post_init__ pour les valeurs dérivées

Définissez __post_init__ pour exécuter du code juste après le __init__ généré. C'est l'endroit naturel où calculer les champs dérivés d'autres champs.

from dataclasses import dataclass, field

@dataclass
class Circle:
    radius: float
    area: float = field(init=False, default=0.0)

    def __post_init__(self):
        self.area = 3.14159 * self.radius ** 2

print(Circle(2.0))

Stocker des métadonnées

L'argument metadata associe une table de correspondance arbitraire à un champ. Python l'ignore, mais les outils et votre propre code peuvent la lire pour fournir des indications de documentation ou de validation.

from dataclasses import dataclass, field, fields

@dataclass
class Product:
    price: float = field(metadata={'unit': 'USD'})

for f in fields(Product):
    print(f.name, f.metadata)

Combiner les options de field()

Les options se cumulent. Un même champ peut être masqué dans repr, exclu de la comparaison et doté d'une valeur par défaut.

from dataclasses import dataclass, field

@dataclass
class Session:
    user: str
    token: str = field(default='x', repr=False, compare=False)

print(Session('alice'))
print(Session('alice') == Session('alice', token='different'))

Vérification rapide

Comment donner à un champ de classe de données une liste vide par défaut ?

Récapitulatif

Vous avez appris à définir des valeurs par défaut et à utiliser les options de field().

  • Les champs avec une valeur par défaut viennent après les champs obligatoires.
  • Utilisez default_factory pour les valeurs par défaut modifiables.
  • repr, compare, init et metadata permettent d'ajuster chaque champ.
  • __post_init__ calcule les valeurs dérivées.

Questions Fréquemment Posées

La leçon « Valeurs par défaut et field() » est-elle gratuite ?

Oui — le texte complet de « Valeurs par défaut et field() » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Valeurs par défaut et field() » ?

Définissez des valeurs par défaut et utilisez les options de field(). Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Python Academy ?

Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Valeurs par défaut et field() » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?

Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Définir une classe de données
  2. Valeurs par défaut et field()
  3. Options d'immutabilité et de comparaison
  4. La bibliothèque attrs
← Retour à Python Academy