Dans cet exercice, on veut permettre d'additionner plusieurs chaînes de caractères ensemble pour récupérer un chemin de dossier.
La variable composite, qui additionne l'instance c avec des chaînes de caractères doit donc retourner le chemin :
>>> composite = c + "dossier" + "test" + "script"
/Users/john/dossier/test/script
Le symbole d'addition doit donc concaténer les différentes chaînes de caractères ensemble en ajoutant un slash entre chaque chaîne de caractères afin de créer un chemin au format unix valide.
Pour implémenter l'addition entre des instances, on utilise la méthode spéciale __add__.
code Code
class Chemin:
def __init__(self, chemin):
self.chemin = chemin
def __str__(self):
return self.chemin
def __add__(self, content):
return Chemin(self.chemin + "/" + content)
c = Chemin("/Users/john")
composite = c + "dossier" + "test" + "script"
print(composite)
comment Explications
Pour implémenter l'addition entre instances, on utilise la méthode spéciale __add__.
Cette méthode est appelée quand on utilise le symbole d'addition après une instance de notre classe.
Cette méthode prend un paramètre qui va récupérer ce qui est envoyée après le symbole d'addition.
Ainsi, le code suivant :
c = Chemin("/Users/john")
composite = c + "dossier"
Reviens à faire :
c = Chemin("/Users/john")
c.__add__("dossier")
À l'intérieur de cette méthode __add__ nous ajoutons donc l'argument content à notre attribut chemin en ajoutant un slash entre les deux :
def __add__(self, content):
return self.chemin + "/" + content
Le problème c'est que si on s'arrête là en retournant directement une chaîne de caractères, on ne pourra additionner qu'une seule chaîne de caractères avec notre instance.
Pour remédier à cela et permettre d'ajouter autant de chaînes de caractères à notre instance, il faut à la place retourner une instance de la classe Chemin elle-même :
def __add__(self, content):
return Chemin(self.chemin + "/" + content)
C'était la petite subtilité de l'exercice. Bravo si vous l'avez réussi sans regarder la solution !
star Points importants
-
Pour permettre l'addition entre différentes instances d'une classe, on implémente la méthode
__add__. -
Pour permettre d'utiliser l'opérateur d'addition en chaîne, on retourne une instance de la classe elle-même.
class Chemin:
def __init__(self, chemin):
self.chemin = chemin
def __str__(self):
return self.chemin
c = Chemin("/Users/john")
composite = c + "dossier" + "test" + "script"
print(composite)class Chemin:
def __init__(self, chemin):
self.chemin = chemin
def __str__(self):
return self.chemin
def __add__(self, content):
return Chemin(self.chemin + "/" + content)
c = Chemin("/Users/john")
composite = c + "dossier" + "test" + "script"
print(composite)Console
Un instant...
Résultats
Test de la variable composite
assert str(composite) == "/Users/john/dossier/test/script", "La variable composite ne contient pas la bonne valeur."
Test de l'addition de chaînes de caractères avec l'instance c
c = Chemin("/Users/john")
composite = c + "dossier" + "bravo" + "reussi"
assert str(composite) == "/Users/john/dossier/bravo/reussi", "L'addition de chaînes de caractères avec l'instance c ne retourne pas la bonne valeur."Bravo, tu as réussi cet exercice de code 🥳
Envoyer ma solution
Vous avez trouvé une solution alternative pour cet exercice ? Proposez votre solution à la communauté 👇
Ma solution :
