Leçon 4 / 9 — Chapitre 3: POO : méthodes spéciales, propriétés et dataclasses
Méthodes de classe avec @classmethod
Une méthode normale reçoit self (l'objet). Une méthode décorée avec @classmethod reçoit à la place cls (la classe elle-même) — utile pour créer un objet d'une manière alternative, sans passer par __init__ directement.
class Produit:
def __init__(self, nom, prix):
self.nom = nom
self.prix = prix
@classmethod
def depuis_texte(cls, texte):
nom, prix = texte.split(",")
return cls(nom, float(prix))
p = Produit.depuis_texte("riz,5")
print(p.nom, p.prix)
Ce code affiche riz 5.0. depuis_texte est appelée directement sur la classe (Produit.depuis_texte(...)), pas sur un objet déjà créé — cls désigne Produit, et cls(nom, float(prix)) équivaut à Produit(nom, float(prix)), créant un nouvel objet.
Cette technique offre une manière alternative et nommée de créer un objet, en plus du constructeur standard — pratique quand plusieurs façons de construire un objet ont chacune du sens (ici, depuis une chaîne "nom,prix" plutôt que deux arguments séparés).
L'avantage d'utiliser cls plutôt que d'écrire Produit(...) directement dans la méthode : si une sous-classe hérite de Produit sans redéfinir depuis_texte, cls désigne alors automatiquement la sous-classe, pas Produit.
À vous de jouer : écrivez une méthode de classe depuis_texte qui construit un objet à partir d'une chaîne "nom,valeur", et testez-la.
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