Les classes en Python

classes Python

Les classes en Python

Dans le programme de Terminale NSI, la notion de classes Python apparaît. En 1ère, on ne doit pas en parler car la Première est une classe d’initiation. Comment se présente une classe ? Et en quoi peut-elle aider ? Voici quelques éléments de réponse.

python classes

C’est quoi une classe ?

On va dire, pour simplifier, que c’est un objet qui regroupe plusieurs “fonctions”. Par exemple, la classe marteau pourra avoir comme fonction enfoncer, fonction qui aura comme argument par exemple un clou.

Les fonctions des classes sont appelées des méthodes. Quant aux arguments des méthodes, on les appelle des attributs.

Et ça donne quoi les classes en Python ?

L’implémentation d’une classe peut se faire de diverses façons. Je vais en montrer une seule, que je trouve plus pratique et plus simple. Pour ce paragraphe, je ne vais plus prendre l’exemple du marteau, mais un exemple plus parlant. Je vais créé une classe mot avec une méthode anagramme qui aura pour mission de recracher une anagramme du mot.

from random import shuffle

class Mot:
    def __init__(self,mot):
        self.mot = mot

    def anagramme(self):
        a = list(self.mot)
        shuffle(a)
        return "".join( a )

m = Mot("palindrome")
print( m.anagramme() )

On commence alors par définir une variable “m” comme étant un Mot. m est un objet défini par notre classe. Cet objet est construit à partir d’une chaîne de caractères (ici, “palindrome”). Alors, “m.anagramme()” va désigner l’action faite sur le mot “m” en utilisant la méthode anagramme; le résultat sera une chaîne de caractères correspondant à une anagramme de l’objet “m”.

On peut imaginer alors plusieurs méthodes pour un même objet. Les classes font d’ailleurs partie de ce que l’on appel la Programmation Orientée Objet (POO).

Un autre exemple (pour la route)

class Rectangle:
    def __init__(self,a,b):
        self.longueur, self.largeur = a , b

    def perimetre(self):
        return 2 * (self.longueur + self.largeur)

    def aire(self):
        return self.longueur * self.largeur

    def is_square(self):
        return self.longueur == self.largeur

fig = Rectangle(3,8)

print( "Le périmétre est :" , fig.perimetre() )
print( "L'aire est :" , fig.aire() )
if fig.is_square():
    print( "C'est un carré" )
else:
    print("Ce n'est pas un carré")

Ici, on définit l’objet “Rectangle” avec trois méthodes :

  • perimetre, qui donne le périmètre du rectangle
  • aire, qui donne son aire
  • is_square, qui dit si c’est un carré.

Pour aller plus loin…

Là où ça commence à être intéressant, c’est quand on souhaite implémenter des objets plus abstraits. Par exemple, des arbres ou des graphes.

J’ai créé une classe qui gère :

  • la construction de graphes non pondérés,
  • leurs parcours (en largeur et en profondeur),
  • d’autres opérations, comme l’affichage de tous les chemins d’un sommet à un autre)

ainsi qu’une autre classe permettant d’obtenir le plus court chemin pour un graphe pondéré à l’aide de l’algorithme de Dijkstra.

Les abonné.e.s de mathweb.fr trouveront dans un fichier .py:

  • Graphe, une classe avec plusieurs méthodes. addArete permet d’ajouter une arête entre deux sommets afin d’implémenter le graphe, de le définir). cycles permet d’afficher tous les cycles du graphe). chemins permet d’afficher tous les chemins d’un sommet à un autre. parcoursProfondeur et parcoursLargeur qui parcourent donc le graphe en profondeur et en largeur;
  • GraphePondM, une classe destinée aux graphes pondérés définis par une matrice de valuation, avec plusieurs méthodes. add : ajoute une ligne à la matrice de valuation. dijkstra : retourne le plus court chemin à partir d’un sommet vers tous les autres sommets;
  • GraphePond, une classe destinée aux graphes pondérés définis par liste d’adjacence valuée. Par exemple, add(‘A’,’B’,4) signifie qu’il y a un arc orienté de A vers B avec un poids de 4. Cette classe admet les mêmes méthodes que GraphePondM.

Ce fichier est téléchargeable ci-dessous pour les abonné·e·e:

Cette partie est réservée aux abonné.e.s de ce site.
Si vous êtes abonné·e·s, merci de vous identifier pour visualiser le contenu dans son intégralité.
Stéphane Pasquet
Stéphane Pasquet

Laissez votre message