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 SmithSans __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__ automatiquementSortie :
350Point 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.
Défi
FacileDans 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émentationdriver.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 avecstr()ouprint()__len__- Appelé lors de l'utilisation de la fonctionlen()
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__ automatiquementSans __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"
passCette 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
1Les fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe paramètre selfMéthodesAttributsMéthode constructeur (__init__)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLa fonction super()Redéfinition de méthodeHéritage multipleOrdre de résolution des méthodesRécapitulatif - Hiérarchie des employés7Méthodes spéciales
Introduction aux méthodes magiquesSurcharge d'opérateursMéthodes magiques de conteneurRécapitulatif - Liste personnalisée10Patrons de conception, Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy2Décorateurs
Introduction aux décorateursDécorateur de propriétéDécorateur de méthode statiqueDécorateur de méthode de classe5Polymorphisme
Retour sur la redéfinition de méthodeDuck TypingClasses et méthodes abstraitesConception d'interfacesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageMixinsMéthodes statiques et de classeDécorateurs de classeGestionnaires de contexte11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Propriétés de classe
Variables d'instance vs variables de classeDécorateurs de propriétéAttributs privésRécapitulatif - Gestionnaire de compte bancaire