Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
Dataclass + Enum combinés
En combinant dataclass et Enum, tu obtiens un typage fort : les champs ne peuvent prendre que des valeurs predefinies. C'est particulierement utile pour modeliser des entites metier avec des états finis.
Par exemple, une tache peut etre dans un nombre fini d'états (en attente, en cours, terminee, annulee). En utilisant un Enum pour le statut, tu t'assures qu'aucune valeur invalide ne peut se glisser.
@dataclass class Commande: numéro: str statut: StatutCommande = StatutCommande.NOUVELLE
Crée : - Statut(Enum) avec EN_ATTENTE, EN_COURS, TERMINE, ANNULE - Priorite(Enum) avec BASSE=1, NORMALE=2, HAUTE=3 - Tache (dataclass) avec titre: str, statut: Statut = Statut.EN_ATTENTE, priorite: Priorite = Priorite.NORMALE - Méthode est_active() retournant True si statut est EN_COURS - Méthode terminer() qui change le statut a TERMINE
Exemple : t = Tache('Livrer le projet') t.statut # Statut.EN_ATTENTE t.terminer() t.statut # Statut.TERMINE
Tests (3/4)
Création par défaut
t = Tache('Livrer le projet')
assert t.statut == Statut.EN_ATTENTE
assert t.priorite == Priorite.NORMALE
est_active False
t = Tache('Test')
assert t.est_active() == False
terminer()
t = Tache('Fix bug')
t.terminer()
assert t.statut == Statut.TERMINE
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
from dataclasses import dataclass
from enum import Enum
class Statut(Enum):
EN_ATTENTE = 'en_attente'
EN_COURS = 'en_cours'
TERMINE = 'termine'
ANNULE = 'annule'
class Priorite(Enum):
BASSE = 1
NORMALE = 2
HAUTE = 3
@dataclass
class Tache:
titre: str
statut: Statut = Statut.EN_ATTENTE
priorite: Priorite = Priorite.NORMALE
def est_active(self):
return self.statut == Statut.EN_COURS
def terminer(self):
self.statut = Statut.TERMINE