Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
Decorateur de classe
Un decorateur de classe, c'est une fonction qui prend une classe en paramètre, la modifie, et la retourne. C'est comme un atelier de personnalisation : tu envoies ta voiture, elle revient avec des options en plus.
Exemple : def ajouter_version(cls): cls.version = '1.0' return cls
@ajouter_version class MonApp: pass
MonApp.version # '1.0'
Crée un decorateur de classe ajouter_repr qui ajoute automatiquement une méthode __repr__ a n'importe quelle classe. Le __repr__ génère doit afficher le nom de la classe et tous ses attributs d'instance sous la forme NomClasse(attr1=val1, attr2=val2).
Pour lister les attributs d'instance, utilise self.__dict__.items(). Pour les valeurs de type string, elles doivent apparaitre avec des guillemets (utilise !r dans la f-string).
Exemple : @ajouter_repr class Voiture: def __init__(self, marque, annee): self.marque = marque self.annee = annee
v = Voiture('Toyota', 2020) repr(v) # "Voiture(marque='Toyota', annee=2020)"
Tests (2/4)
Repr de base
v = Voiture('Toyota', 2020)
assert repr(v) == "Voiture(marque='Toyota', annee=2020)"
Autre instance
v = Voiture('BMW', 2023)
assert 'BMW' in repr(v) and '2023' in repr(v)
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
def ajouter_repr(cls):
def __repr__(self):
attrs = ', '.join(f'{k}={v!r}' for k, v in self.__dict__.items())
return f'{cls.__name__}({attrs})'
cls.__repr__ = __repr__
return cls
@ajouter_repr
class Voiture:
def __init__(self, marque, annee):
self.marque = marque
self.annee = annee