Méthodes

DéfinitionMéthode

Une méthode est une fonction définie à l’intérieur d’une classe. Elle définit les comportements des objets créés à partir de cette classe. Une méthode peut accéder et modifier les attributs de l’objet, ainsi que prendre des arguments et renvoyer des valeurs comme toute fonction en Python.

Pour définir une méthode dans une classe, nous utilisons la syntaxe suivante :

1
class MaClasse:
2
    def ma_methode(self, arg1, arg2):
3
        # Corps de la méthode

Dans cet exemple, nous avons défini une méthode ma_methode dans la classe MaClasse. Cette méthode prend trois arguments : self, arg1 et arg2. L’argument self est une référence à l’objet sur lequel la méthode est appelée. Il est automatiquement passé par Python lors de l’appel de la méthode et doit toujours être le premier argument d’une méthode.

ExempleVélo

Voici un exemple concret qui montre comment définir et utiliser des méthodes dans notre classe Velo :

1
class Velo:
2
    """Représente un vélo avec une marque, un modèle et une couleur."""
3
4
    def __init__(self, marque, modele, couleur):
5
        """Initialise les attributs du vélo avec les valeurs données."""
6
        self.marque = marque
7
        self.modele = modele
8
        self.couleur = couleur
9
10
    def rouler(self, distance):
11
        """Fait rouler le vélo sur la distance donnée."""
12
        print(f"Le vélo {self.marque} {self.modele} roule sur {distance} km.")
13
14
# Création d'un objet Velo
15
mon_velo = Velo('Peugeot', 'E01 D9', 'bleu')
16
17
# Appel de la méthode rouler sur l'objet
18
mon_velo.rouler(10)  # Le vélo Peugeot E01 D9 roule sur 10 km.

Dans cet exemple, nous avons défini une méthode rouler dans la classe Velo. Cette méthode prend deux arguments : self et distance. Elle utilise l’argument self pour accéder aux attributs marque et modele de l’objet et affiche un message indiquant que le vélo roule sur la distance donnée.

Ensuite, nous avons créé un objet mon_velo à partir de la classe Velo et avons appelé la méthode rouler sur cet objet en utilisant la syntaxe mon_velo.rouler(10). Comme on peut le voir, la méthode a bien été exécutée et a affiché le message attendu.

Les méthodes spéciales

Les méthodes spéciales sont des méthodes qui ont des noms spécifiques commençant et se terminant par deux underscores, comme __init__, __str__ et __repr__. Ces méthodes sont appelées automatiquement par Python dans certaines situations, comme lors de la création d’un objet ou lors de l’affichage d’un objet en tant que chaîne de caractères.

Exemple__str__ et __repr__

1
class Velo:
2
    """Représente un vélo avec une marque, un modèle et une couleur."""
3
4
    def __init__(self, marque, modele, couleur):
5
        """Initialise les attributs du vélo avec les valeurs données."""
6
        self.marque = marque
7
        self.modele = modele
8
        self.couleur = couleur
9
10
    def __str__(self):
11
        """Retourne une représentation en chaîne de caractères du vélo."""
12
        return f"Velo {self.marque} {self.modele} de couleur {self.couleur}"
13
14
    def __repr__(self):
15
        """Retourne une représentation formelle du vélo."""
16
        return f"Velo('{self.marque}', '{self.modele}', '{self.couleur}')"
17
18
# Création d'un objet Velo
19
mon_velo = Velo('Peugeot', 'E01 D9', 'bleu')
20
21
# Affichage de l'objet en utilisant la méthode __str__
22
print(mon_velo)  # Velo Peugeot E01 D9 de couleur bleu
23
24
# Affichage de l'objet en utilisant la méthode __repr__
25
print(repr(mon_velo))  # Velo('Peugeot', 'E01 D9', 'bleu')
26

Dans cet exemple, nous avons défini les méthodes spéciales __str__ et __repr__ dans la classe Velo. La méthode __str__ retourne une représentation en chaîne de caractères du vélo, tandis que la méthode __repr__ retourne une représentation formelle du vélo. Ces méthodes sont appelées automatiquement par Python lorsque nous affichons l’objet en utilisant la fonction print ou la fonction repr.

Les méthodes de classe et les méthodes statiques

Les méthodes de classe et les méthodes statiques sont des méthodes qui sont liées à la classe elle-même plutôt qu’à ses instances. Les méthodes de classe prennent en premier argument une référence à la classe, tandis que les méthodes statiques ne prennent aucun argument spécial. Ces méthodes sont généralement utilisées pour créer des fonctions utilitaires liées à la classe.

Exemple@classmethod et @staticmethod

1
class Velo:
2
    """Représente un vélo avec une marque, un modèle et une couleur."""
3
4
    nb_velos = 0  # Attribut de classe pour compter le nombre de vélos
5
6
    def __init__(self, marque, modele, couleur):
7
        """Initialise les attributs du vélo avec les valeurs données."""
8
        self.marque = marque
9
        self.modele = modele
10
        self.couleur = couleur
11
        Velo.nb_velos += 1  # Incrémente le compteur de vélos
12
13
    @classmethod
14
    def get_nb_velos(cls):
15
        """Retourne le nombre total de vélos créés."""
16
        return cls.nb_velos
17
18
    @staticmethod
19
    def get_types():
20
        """Retourne une liste des types de vélos disponibles."""
21
        return ['VTT', 'VTC', 'Vélo de route', 'Vélo électrique']
22
23
# Affichage du nombre total de vélos (avant création d'objets)
24
print(Velo.get_nb_velos())  # 0
25
26
# Création d'objets Velo
27
velo1 = Velo('Peugeot', 'E01 D9', 'bleu')
28
velo2 = Velo('Bianchi', 'Oltre XR4', 'noir')
29
30
# Affichage du nombre total de vélos (après création d'objets)
31
print(Velo.get_nb_velos())  # 2
32
33
# Affichage des types de vélos disponibles
34
print(Velo.get_types())  # ['VTT', 'VTC', 'Vélo de route', 'Vélo électrique']

Dans cet exemple, nous avons défini une méthode de classe get_nb_velos et une méthode statique get_types dans la classe Velo. La méthode de classe get_nb_velos utilise l’argument cls pour accéder à l’attribut de classe nb_velos et retourner sa valeur. La méthode statique get_types ne prend aucun argument spécial et retourne simplement une liste des types de vélos disponibles.

Il est important d'utiliser @classmethod et @staticmethod pour indiquer à Python de ne pas passer self en paramètre.

La surcharge d’opérateurs

La surcharge d’opérateurs permet de définir des comportements personnalisés pour les opérateurs tels que +, -, *, /, etc. en utilisant des méthodes spéciales. Par exemple, nous pouvons définir une méthode spéciale __add__ dans notre classe pour spécifier comment les objets de cette classe doivent se comporter lorsqu’ils sont ajoutés avec l’opérateur +.

Exemple__add__

1
class Velo:
2
    """Représente un vélo avec une marque, un modèle et une couleur."""
3
4
    def __init__(self, marque, modele, couleur):
5
        """Initialise les attributs du vélo avec les valeurs données."""
6
        self.marque = marque
7
        self.modele = modele
8
        self.couleur = couleur
9
10
    def __add__(self, autre_velo):
11
        """Combine deux vélos en un seul vélo tandem."""
12
        nouvelle_marque = f"{self.marque}-{autre_velo.marque}"
13
        nouveau_modele = f"{self.modele}-{autre_velo.modele}"
14
        nouvelle_couleur = f"{self.couleur}/{autre_velo.couleur}"
15
        return Velo(nouvelle_marque, nouveau_modele, nouvelle_couleur)
16
17
# Création de deux objets Velo
18
velo1 = Velo('Peugeot', 'E01 D9', 'bleu')
19
velo2 = Velo('Bianchi', 'Oltre XR4', 'noir')
20
21
# Combinaison des deux vélos en un seul vélo tandem
22
tandem = velo1 + velo2
23
24
# Affichage des attributs du vélo tandem
25
print(tandem.marque)  # Peugeot-Bianchi
26
print(tandem.modele)  # E01 D9-Oltre XR4
27
print(tandem.couleur) # bleu/noir

Dans cet exemple, nous avons défini une méthode spéciale __add__ dans la classe Velo pour surcharger l’opérateur +. Cette méthode prend en argument un autre objet Velo et crée un nouvel objet Velo qui représente un vélo tandem combinant les marques, les modèles et les couleurs des deux vélos originaux.

Nous avons ensuite créé deux objets Velo et avons utilisé l’opérateur + pour les combiner en un seul objet tandem. Comme on peut le voir, les attributs du nouvel objet tandem combinent les valeurs des attributs des deux objets Velo originaux.