La POO en Python

Cette page explique comment utiliser la programmation orientée objet en python et donne un exemple concret de passage de code « classique » à un code orienté objet via l’exemple du jeu du pendu.

Elle est séparée en deux parties :

Comment faire de la Programmation Orientée Objet dans son code ?

Créer une classe

En Python, pour créer une classe, on utilise le mot-clé classe, suivi du nom de la classe. Ensuite, il faut ajouter ce qu’on appelle le constructeur :

class Pendu:
  def __init__(self):  
pass

Lorsqu’on va créer un objet de cette classe, le constructeur est simplement la fonction qui va être appelée au tout début. On peut ajouter des arguments à cette fonction pour donner des valeurs à des variables de cette classe.

Dans l’exemple ci-dessus, lorsque l’on créera un objet Pendu, il ne se passera rien de particulier (l’instruction pass permet de créer une fonction vide).

class Perso:
  def __init__(self, nom, force, vitesse):
    self.nom = nom
    self.force = force
    self.vitesse = vitesse
    self.taux_coup_critique = force * vitesse / 100.0

Mais dans de nombreux cas on souhaite qu’il se passe quelque chose lors de l’initialisation ! Dans l’exemple ci-contre, lorsqu’un Perso sera créé, on récupèrera son nom, sa force, sa vitesse, et on calculera le taux_coup_critique.

Instancier un objet

Pour créer un objet de cette classe, on va utiliser le nom de la classe comme si c’était une fonction comme ceci :

partie = Pendu()
mon_perso = Perso("Batman", 25, 10)

Si la classe en question requiert des arguments, il faut alors bien sûr les préciser.

Attributs & méthodes

Pour définir des variables de classe (c’est-à-dire des attributs), il faut utiliser le mot-clé self. On peut donc créer une variable en_cours par exemple qui serait un booléen initialisé à False. Et pour accéder à cette variable, on va utiliser le nom de l’objet, un point et le nom de la variable :

class Pendu:
  def __init__(self):
    self.en_cours = False

partie = Pendu()
print(partie.en_cours)  #=> False
class Pendu:
  def __init__(self):
    self.en_cours = False

  def lancer(self):
    self.en_cours = True

partie = Pendu()
partie.lancer()
print(partie.en_cours)  #=> True

Il est également possible de définir des fonctions à l’intérieur d’une classe (c’est-à-dire des méthodes) en utilisant le mot-clé def comme d’habitude mais avec l’indentation de la classe. Ensuite, pour appeler la méthode, il suffit d’utiliser la notation avec le point, comme pour les variables.

Dans l’exemple ci-contre, la classe Pendu possède une méthode lancer() !

Amélioration d’un code pour qu’il soit orienté objet : exemple du pendu

Tu trouveras ci-dessous des captures qui t’aideront à comprendre comment on peut passer d’un code « classique » à un code orienté objet. Tu peux aussi trouver le code du bot du pendu ici :

Code du bot du pendu

(Clique sur une image pour l’agrandir)

Note : Le code actuel du pendu orienté objet est différent de celui présenté dans ces images. Ces captures sont simplement fournies à titre d’exemple afin d’avoir un exemple concret du passage d’un code « classique » vers un code orienté objet.

Retour en haut