1. A propos des méthodes magiques
En Python, les méthodes magiques, également appelées méthodes spéciales ou méthodes du double underscore (__), sont des méthodes prédéfinies qui permettent aux objets de se comporter de manière spécifique lorsqu'ils sont utilisés avec des opérateurs ou des fonctions intégrées. Ces méthodes sont appelées "magiques" car elles peuvent sembler invisibles aux programmeurs débutants, mais elles sont en fait utilisées en arrière-plan pour effectuer des tâches spécifiques.
Voici quelques-unes des méthodes magiques les plus couramment utilisées en Python pour la programmation orientée objet :
- init : Cette méthode est appelée lorsque l'objet est instancié. Elle est utilisée pour initialiser les attributs de l'objet.
- str : Cette méthode est utilisée pour définir une représentation sous forme de chaîne de caractères de l'objet. Elle est appelée lorsque la fonction print() est utilisée pour l'objet.
- repr : Cette méthode est utilisée pour définir une représentation sous forme de chaîne de caractères de l'objet. Elle est appelée lorsque la fonction repr() est utilisée pour l'objet.
- len : Cette méthode est utilisée pour définir la longueur de l'objet. Elle est appelée lorsque la fonction len() est utilisée pour l'objet.
- getitem : Cette méthode est utilisée pour accéder à un élément spécifique de l'objet à l'aide de la notation des crochets ([ ]).
- setitem : Cette méthode est utilisée pour modifier un élément spécifique de l'objet à l'aide de la notation des crochets ([ ]).
- delitem : Cette méthode est utilisée pour supprimer un élément spécifique de l'objet à l'aide de la notation des crochets ([ ]).
- add : Cette méthode est utilisée pour ajouter deux objets ensemble.
- sub : Cette méthode est utilisée pour soustraire un objet d'un autre.
- eq : Cette méthode est utilisée pour tester l'égalité entre deux objets.
En utilisant les méthodes magiques, vous pouvez personnaliser le comportement des objets dans votre programme et rendre votre code plus lisible et plus facile à maintenir.
2. Exemples d'usage des méthodes magiques
Voici quelques exemples d'utilisation courante des méthodes magiques en Python :
2.1 La méthode __init__()
Cette méthode est utilisée pour initialiser les attributs d'un objet lorsqu'il est créé.
Exemple
1 2 3 4 5 6 7 |
class Person: def __init__(self, name, age): self.name = name self.age = age p = Person("Adam", 30) print(p.name) # Output: Adam |
2.2 La méthode __str__()
Cette méthode est utilisée pour définir une représentation sous forme de chaîne de caractères de l'objet.
Exemple
1 2 3 4 5 6 7 8 9 10 |
class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f"Person(name={self.name}, age={self.age})" p = Person("Adam", 30) print(p) # Output: Person(name=Adam, age=30) |
2.3 La méthode len()
Cette méthode est utilisée pour définir la longueur de l'objet.
Exemple
1 2 3 4 5 6 7 8 9 |
class MyList: def __init__(self, items): self.items = items def __len__(self): return len(self.items) my_list = MyList([1, 2, 3, 4, 5]) print(len(my_list)) # Output: 5 |
2.4 La méthode __getitem__()
Cette méthode est utilisée pour accéder à un élément spécifique de l'objet à l'aide de la notation des crochets ([ ]).
Exemple
1 2 3 4 5 6 7 8 9 |
class MyList: def __init__(self, items): self.items = items def __getitem__(self, index): return self.items[index] my_list = MyList([1, 2, 3, 4, 5]) print(my_list[2]) # Output: 3 |
2.4 La méthode __add__()
Cette méthode est utilisée pour ajouter deux objets ensemble.
Exemple
1 2 3 4 5 6 7 8 9 10 11 12 |
class Point: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): return Point(self.x + other.x, self.y + other.y) p1 = Point(1, 2) p2 = Point(3, 4) p3 = p1 + p2 print(p3.x, p3.y) # Output: 4 6 |
En utilisant les méthodes magiques, vous pouvez personnaliser le comportement des objets dans votre programme et rendre votre code plus lisible et plus facile à maintenir.
3. Principales différences entre une méthode d'instance et une méthode magique
- Une méthode d'instance : en programmation orientée objet en Python, est une méthode qui est définie dans une classe et qui peut être appelée sur une instance de cette classe. Une méthode d'instance prend au moins un argument, qui est généralement appelé "self", et qui fait référence à l'instance sur laquelle la méthode est appelée.
- Une méthode magique: également appelée méthode spéciale ou méthode du double underscore (__), est une méthode prédéfinie en Python qui est appelée automatiquement par l'interpréteur dans certaines situations spécifiques, généralement liées à l'utilisation d'opérateurs intégrés ou de fonctions. Les méthodes magiques sont appelées "magiques" car elles permettent de personnaliser le comportement des objets en arrière-plan, sans que le développeur ait besoin d'appeler explicitement la méthode.
- La principale différence: entre une méthode d'instance et une méthode magique est que la méthode d'instance est explicitement appelée par le développeur lorsqu'il souhaite exécuter une certaine action sur l'instance, tandis que la méthode magique est appelée automatiquement par l'interpréteur lorsqu'une action spécifique est effectuée sur l'instance, telle que l'accès à un attribut ou l'utilisation d'un opérateur.
Exemple
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height def __str__(self): return f"Rectangle(width={self.width}, height={self.height})" # instanciation de la classe Rectangle my_rectangle = Rectangle(5, 10) # appel de la méthode "area" sur l'objet "my_rectangle" print(my_rectangle.area()) # Output: 50 # appel de la méthode ".__str__()" sur l'objet "my_rectangle" print(my_rectangle) # Output: Rectangle(width=5, height=10) |
- La méthode "area()": est une méthode d'instance qui calcule la surface d'un rectangle. Cette ne s'exécute que si elle est explicitement appelée par le développeur.
- La méthode "str()": est une méthode magique qui définit une représentation sous forme de chaîne de caractères de l'objet, et est appelée automatiquement lorsque l'objet est utilisé avec la fonction "print()".
- La principale différence: entre une méthode d'instance et une méthode magique est que la méthode d'instance est explicitement appelée par le développeur, tandis que la méthode magique est appelée automatiquement par l'interpréteur dans des situations spécifiques. Les méthodes magiques permettent de personnaliser le comportement des objets de manière transparente pour le développeur.
4. Liste des méthodes magiques d'un objet d'instance
Il existe un grand nombre de méthodes magiques en Python, chacune ayant une utilisation spécifique pour personnaliser le comportement des objets. Voici une liste de certaines des méthodes magiques les plus couramment utilisées :
- __new__(cls, *args, **kwargs): Cette méthode est appelée lorsqu'un nouvel objet est créé et est utilisée pour créer et initialiser l'objet. La méthode ".new()" doit renvoyer l'objet nouvellement créé.
- __init__(self, *args, **kwargs): Cette méthode est appelée immédiatement après la création d'un nouvel objet et est utilisée pour initialiser les attributs de l'objet. Cette méthode ne renvoie rien et prend en paramètre l'objet nouvellement créé ainsi que les arguments passés lors de l'instanciation.
- __str__(self): Cette méthode est appelée lorsque la fonction "str()" est appelée sur l'objet et est utilisée pour renvoyer une représentation sous forme de chaîne de caractères de l'objet.
- __repr__(self): Cette méthode est appelée lorsque la fonction "repr()" est appelée sur l'objet et est utilisée pour renvoyer une représentation sous forme de chaîne de caractères de l'objet qui peut être utilisée pour recréer l'objet.
- __len__(self): Cette méthode est appelée lorsque la fonction "len()" est appelée sur l'objet et est utilisée pour renvoyer la taille de l'objet.
- __getitem__(self, key): Cette méthode est appelée lorsque l'objet est indexé avec des crochets et est utilisée pour renvoyer l'élément correspondant à la clé spécifiée.
- __setitem__(self, key, value): Cette méthode est appelée lorsqu'un élément est affecté à un objet en utilisant l'opérateur d'indexation et est utilisée pour affecter la valeur à la clé spécifiée.
- __delitem__(self, key): Cette méthode est appelée lorsqu'un élément est supprimé d'un objet en utilisant l'opérateur d'indexation et est utilisée pour supprimer l'élément correspondant à la clé spécifiée.
- __eq__(self, other): Cette méthode est appelée lorsque l'opérateur de comparaison "== " est utilisé pour comparer l'objet avec un autre objet et est utilisée pour renvoyer True si les deux objets sont égaux, False sinon.
- __lt__(self, other): Cette méthode est appelée lorsque l'opérateur de comparaison "<" est utilisé pour comparer l'objet avec un autre objet et est utilisée pour renvoyer True si l'objet est inférieur à l'autre objet, False sinon.
- __gt__(self, other): Cette méthode est appelée lorsque l'opérateur de comparaison ">" est utilisé pour comparer l'objet avec un autre objet et est utilisée pour renvoyer True si l'objet est supérieur à l'autre objet, False sinon.
- __add__(self, other): Cette méthode est appelée lorsque l'opérateur "+" est utilisé pour ajouter l'objet à un autre objet et est utilisée pour renvoyer le résultat de l'addition.
- __sub__(self, other): Cette méthode est appelée lorsque l'opérateur "-" est utilisé pour soustraire un objet d'un autre objet et est utilisée pour renvoyer le résultat de la soustraction.
- __mul__(self, other): Cette méthode est appelée lorsque l'opérateur "*" est utilisé pour multiplier l'objet par un autre objet et est utilisée pour renvoyer le résultat de la multiplication.
- __truediv__(self, other): Cette méthode est appelée lorsque l'opérateur "/" est utilisé pour diviser l'objet par un autre objet et est utilisée pour renvoyer le résultat de la division.
- __floordiv__(self, other): Cette méthode est appelée lorsque l'opérateur "//" est utilisé pour diviser l'objet par un autre objet en effectuant une division entière et est utilisée pour renvoyer le résultat de la division entière.
- __mod__(self, other): Cette méthode est appelée lorsque l'opérateur "%" est utilisé pour effectuer le modulo de l'objet par un autre objet et est utilisée pour renvoyer le reste de la division.
- __pow__(self, other[, modulo]): Cette méthode est appelée lorsque l'opérateur "**" est utilisé pour élever l'objet à une puissance et est utilisée pour renvoyer le résultat de l'exponentiation.
- __contains__(self, item): Cette méthode est appelée lorsque l'opérateur "in" est utilisé pour vérifier si un élément est présent dans l'objet et est utilisée pour renvoyer True si l'élément est présent, False sinon.
- __enter__(self): Cette méthode est appelée lorsque le bloc "with" est entré et est utilisée pour initialiser l'objet pour être utilisé dans le bloc "with".
- __exit__(self, exc_type, exc_value, traceback): Cette méthode est appelée lorsque le bloc "with" est quitté et est utilisée pour nettoyer l'objet avant sa sortie.
Remarque
Cette liste n'est pas exhaustive, il existe de nombreuses autres méthodes magiques en Python qui peuvent être utilisées pour personnaliser le comportement des objets.
Younes Derfoufi
CRMEF OUJDA