Leçon 9 / 9 — Chapitre 3: POO : méthodes spéciales, propriétés et dataclasses
Cas pratique : une classe Produit complète
Cette dernière leçon combine @dataclass, une propriété calculée et une méthode de classe alternative, dans une classe Produit complète.
from dataclasses import dataclass
@dataclass
class Produit:
nom: str
prix: float
stock: int = 0
@property
def valeur_stock(self):
return self.prix * self.stock
@classmethod
def depuis_texte(cls, texte):
nom, prix, stock = texte.split(",")
return cls(nom, float(prix), int(stock))
riz = Produit("riz", 5, 20)
huile = Produit.depuis_texte("huile,8,10")
for produit in [riz, huile]:
print(produit, "-> valeur :", produit.valeur_stock, "$")
print(riz == Produit("riz", 5, 20))
Ce que fait chaque partie :
@dataclassgénère__init__,__repr__et__eq__à partir des trois attributs déclarés (vu dans ce chapitre).valeur_stock, en@property, reste accessible sans parenthèses malgré son calcul (vu dans ce chapitre).depuis_texte, en@classmethod, offre une seconde façon de créer unProduit, à partir d'une chaîne unique plutôt que d'arguments séparés (vu dans ce chapitre).
Ce code affiche Produit(nom='riz', prix=5, stock=20) -> valeur : 100 $, puis Produit(nom='huile', prix=8, stock=10) -> valeur : 80 $ (le __repr__ généré s'affiche via print()), puis True pour la comparaison finale, @dataclass ayant généré __eq__ automatiquement.
À vous de jouer : créez un troisième Produit avec depuis_texte, et vérifiez que sa valeur_stock se calcule correctement.
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 87 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès