modifié le

Objet

1. Classe

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Le nom d’une classe commence par une majuscule. C’est là encore une convention qu’il est conseillé de respecter (cf PEPS 8).

2. Instance

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Une bonne pratique en POO est de ne pas accéder, de l’extérieur d’un objet, à ses attributs. L’exemple précédent ne respecte pas cette règle de bonne pratique :-(

3. Méthode

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Pour une classe C, bien noter les 2 acteurs :

  • le concepteur de la classe, qui gère le code du fichier C.py, et qui par conséquent, dispose d’un accès total aux entrailles des objets de type C,

  • l’utilisateur de la classe, qui crée des instances de C sans connaitre les détails de l’implémentation : il importe le fichier C.py sans connaitre son contenu (pas de nécessité d’y jeter un oeil, et encore moins de le modifier).

Pour mettre au point une classe, le codeur prend alternativement le rôle de concepteur et d’utilisateur.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Example 1. aparte

Python n’implémente pas les attributs et méthodes privés, mais propose des parades pour y suppléer.

La première parade est une convention qui consiste à dire que tout attribut ou méthode dont le nom commence par _ est privée. Par exemple :

class Complex:
  def __init__(self,x,y):
    self._x = x
    self._y = y
  ...
z = Complex(1,2)
print(z._x,z._y)   # oulala, c'est pas bien !

Ce n’est peut-être pas bien, mais le programme sort quand-même 1 2.

Une seconde parade consiste à maquiller le nom d’un attribut ou d’une méthode qui commence par `--` :

class Complex:
  def __init__(self,x,y):
    self.__x = x
    self.__y = y
  ...
z = Complex(1,2)
print(z.__x,z.__y)

Ici, le programme sort :

AttributeError: 'Complex' object has no attribute '__x'
AttributeError: 'Complex' object has no attribute '__y'

mais cela n’est que subterfuge, puisque :

print(z._Complex__x,z._Complex__y)

nous donne 1 2.

Python proposera-t-il quel que chose de plus sérieux dans les prochaines versions ?

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

4. Attributs et méthodes implicites

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

4.1. Constructeur

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Créer un constructeur avec paramètres contraint l’instanciation :

#!/bin/env python3
# fichier main.py
from Complex import Complex

z = Complex()     # TypeError: __init__() takes exactly 3 arguments (1 given)
z = Complex(1,2)  # Ok, 2 arguments sont maintenant obligatoires

On constate qu’il n’est maintenant plus possible de créer des complexes sans les initialiser. C’est un avantage : les variables non initialisées ont toujours été des pièges à retardement.

Constructeur (constructor) n’est pas le terme le mieux choisi, car il ne crée pas l’objet, il l’initialise. Mais c’est le terme consacré dans la plupart des langages à objet. Initialisateur serait plus juste. Le véritable constructeur en python est __new__.

4.2. Destructeur

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

4.3. Méthode __str__()

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Question 1

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Question 2

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.