PaliSkill
Python avancé

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 :

  • @dataclass gé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 un Produit, à 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