Menu
Coddy logo textTech

Introduction aux méthodes magiques

Fait partie de la section Object Oriented Programming du Journey Python de Coddy — leçon 33 sur 64.

Les méthodes magiques (également appelées méthodes dunder) sont des méthodes spéciales comportant des doubles traits de soulignement au début et à la fin. Python les appelle automatiquement en réponse à certaines opérations.

Voici un exemple d'une classe avec des méthodes magiques :

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
    
    def __str__(self):
        return f"{self.title} by {self.author}"

La méthode __init__ est appelée automatiquement lorsque vous créez un objet :

my_book = Book("Python Programming", "John Smith", 350)

La méthode __str__ est appelée automatiquement lorsque vous convertissez l'objet en une chaîne de caractères :

print(my_book)        # Appelle __str__ automatiquement
print(str(my_book))   # Appelle également __str__

Sortie :

Python Programming by John Smith
Python Programming by John Smith

Sans __str__, l'affichage montrerait l'emplacement mémoire de l'objet :

class SimpleBook:
    def __init__(self, title):
        self.title = title

simple = SimpleBook("Test Book")
print(simple)  # <__main__.SimpleBook object at 0x...>

Ajoutez une autre méthode magique pour la longueur :

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
    
    def __str__(self):
        return f"{self.title} by {self.author}"
    
    def __len__(self):
        return self.pages

my_book = Book("Python Programming", "John Smith", 350)
print(len(my_book))   # Appelle __len__ automatiquement

Sortie :

350

Point clé : Les méthodes magiques commencent et se terminent par des doubles underscores (__method__) et sont appelées automatiquement par Python. Elles permettent à vos objets de fonctionner avec des fonctions intégrées comme str(), len(), et des opérateurs, rendant vos classes plus pythoniques et intuitives à utiliser.

challenge icon

Défi

Facile

Dans ce défi, vous allez implémenter une classe Counter avec des méthodes magiques.

  • counter.py - C'est le fichier que vous devez éditer, contenant des commentaires TODO pour guider votre implémentation
  • driver.py - Contient des cas de test approfondis

Implémentez la classe Counter dans counter.py et les cas de test dans driver.py en suivant les commentaires TODO. La classe doit prendre en charge l'initialisation avec des valeurs optionnelles, la représentation sous forme de chaîne de caractères et les opérations d'addition.

Aide-mémoire

Les méthodes magiques (méthodes dunder) sont des méthodes spéciales avec des doubles underscores que Python appelle automatiquement en réponse à certaines opérations.

Méthodes magiques courantes :

  • __init__ - Appelé lors de la création d'un objet
  • __str__ - Appelé lors de la conversion en chaîne avec str() ou print()
  • __len__ - Appelé lors de l'utilisation de la fonction len()
class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
    
    def __str__(self):
        return f"{self.title} by {self.author}"
    
    def __len__(self):
        return self.pages

my_book = Book("Python Programming", "John Smith", 350)
print(my_book)        # Appelle __str__ automatiquement
print(len(my_book))   # Appelle __len__ automatiquement

Sans __str__, l'affichage montre l'emplacement mémoire de l'objet au lieu d'un format lisible.

Essayez vous-même

# TODO: Importer la classe Counter depuis counter.py
# Utiliser le format : from counter import Counter

# Gestionnaire de cas de test complet
test_case = input()

if test_case == "init_test":
    # TODO: Tester l'initialisation avec la valeur par défaut
    # Créer un compteur sans argument et l'afficher
    # Sortie attendue : "Count: 0"
    pass

elif test_case == "init_with_value":
    # TODO: Tester l'initialisation avec une valeur spécifique
    # Créer un compteur avec la valeur initiale 10 et l'afficher
    # Note : print() appelle implicitement __str__, mais notre objectif ici est de tester __init__
    # Sortie attendue : "Count: 10"
    pass


elif test_case == "addition":
    # TODO: Tester l'opération d'addition
    # Créer un compteur avec la valeur 3, lui ajouter 7, et afficher le résultat
    # Sortie attendue : "Count: 10"
    pass

elif test_case == "chained_addition":
    # TODO: Tester les opérations d'addition en chaîne
    # Créer un compteur avec la valeur 1, ajouter 2, puis ajouter 3 au résultat, et afficher
    # Sortie attendue : "Count: 6"
    pass

elif test_case == "negative_values":
    # TODO: Tester avec des valeurs négatives
    # Créer un compteur avec la valeur -5 et l'afficher
    # Ensuite, lui ajouter -3 et afficher le résultat
    # Sorties attendues : "Count: -5" et "Count: -8"
    pass

elif test_case == "zero_value":
    # TODO: Tester avec des valeurs nulles
    # Créer un compteur avec la valeur 0, ajouter 0, et afficher
    # Sortie attendue : "Count: 0"
    pass

elif test_case == "large_values":
    # TODO: Tester avec de grandes valeurs
    # Créer un compteur avec la valeur 1000000 et ajouter 9000000
    # Sortie attendue : "Count: 10000000"
    pass

elif test_case == "multiple_counters":
    # TODO: Tester l'interaction entre plusieurs compteurs
    # Créer counter1 avec la valeur 5 et counter2 avec la valeur 10
    # Afficher les deux compteurs
    # Sorties attendues : "Count: 5" et "Count: 10"
    pass

elif test_case == "type_validation":
    # TODO: Tester l'ajout de différents types
    # Essayer d'ajouter un float (2.5) à un compteur avec la valeur 5
    # Sortie attendue : "Count: 7.5"
    pass
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Object Oriented Programming