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.

Afficher l'aide

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...
terminal

Résultats

/ 2 tests validés

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é 👇

Seules les propositions différentes de la solution proposée par Docstring peuvent être envoyées.

Ma solution :

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.