| 
																	
																	
																	
																 | 
																@@ -1,378 +0,0 @@ | 
															
														
														
													
														
															
																 | 
																 | 
																% Les classes en Python - Partie 1 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																% Dimitri Merejkowsky | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Rappels sur les fonctions | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																## Exemple 1 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Définition d'une fonction sans arguments | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																def ma_fonction(): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    print("ma_fonction commence ...") | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    print("bonjour") | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    print("ma_fonction finit.") | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Appel de la fonction `ma_fonction`: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> ma_fonction() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																ma_fonction commence ... | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																bonjour | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																ma_fonction finit. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Exemple 2 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Définition d'une fonction avec un argument, x: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																def ma_fonction(x): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    print("x vaut", x) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Appel de la fonction `ma_fonction`: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> ma_fonction(42) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																x vaut 42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Aparté - le mot-clé `pass` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																En Python, à cause de l'organisation en blocs indentés, on ne | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																peut pas vraiment avoir de blocs vides. Mais parfois, on | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																a besoin d'un bloc qui ne fasse rien. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																\newpage | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Dans ce cas, on peut utiliser le mot-clé `pass`, par exemple | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																après un if: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																une_condition = False | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																if une_condition: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    pass | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																else: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    print("une_condition n'est pas vraie") | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On peut aussi - et c'est l'usage le plus courant - utiliser `pass` pour | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																définir une fonction qui ne fait rien: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																def ne_fait_rien(): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    pass | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> ne_fait_rien() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																<rien> | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Changement de paradigme | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Ce qu’on a vu jusqu’ici: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* Des types simples (entiers, booléens, ...) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* Des structures de données (listes, dictionnaires, ...) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* Des fonctions qui manipulent ces types ou ces types | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* Des fonctions qui s’appellent les unes les autres | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On appelle cet ensemble de concepts, cette façon d'écrire du code, un *paradigme* - | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																et c'est un paradigme *procédural*. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On va passer à un autre paradigme: l'*orienté objet*. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Orienté objet - une première définition | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Un "objet" informatique *représente* un véritable "objet" physique | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																dans le vrai monde véritable. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Ce n'est pas une très bonne définition: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																1. Ce n'est pas nécessaire | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																2. Ce n'est même pas forcément souhaitable! | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Je le mentionne juste parce que c'est une idée reçue très répandue. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Orienté objet - 2ème définition | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Une meilleure définition, c'est de dire que la programmation | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																orintée objet permet de mettre au même endroit: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* des données | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* des fonctions qui opèrent sur ces données | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																L'important c'est que les deux aillent ensemble! | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																*Note: ce n'est pas **la** meilleure définition de l'orienté objet, mais on s'en contentera | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																pour le moment ...* | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Les classes | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On va parler *d'une* façon de faire de l'orienté objet: avec des classes. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Mais notez bien qu'on peut faire de l'orienté objet *sans* classes! | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Le plan de construction | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Pour construire un objet en Python, on a besoin d'un *plan de construction*. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On appelle ce plan une *classe* et on la définit ainsi: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																class MonObjet: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    # du code ici | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Comme les fonctions, les classes contienent un *corps*, qui est le bloc *identé* en dessous | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																du mot-clé `class`, de nom de la classe et du `:` en fin de ligne | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Créons des objets | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On peut faire un plan de construction vide avec le mot clé pass: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																class MonObjet: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    pass | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Dans ce cas, on crée un objet en mettant le nom de la classe suivi d'une paire de parenthèses - | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																un peu comme pour appeler une fonction: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> objet_1 = MonObjet() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Ici, `objet_1` est une *instance* de la classe `MonObjet`. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Attributs | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Les attributs sont des éléments **nommés** à *l'intérieur* d'un objet. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On peut y accéder avec la syntaxe `<objet>.<attribut>`: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																y = a.x | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Ici, `y` est l'attribut `x` de l'objet `a`. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Les attributs peuvent être des fonctions: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																func = a.x | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																func(10) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Ici, on crée une variable `func` qui prend la valeur de l'attribut `x` dans l'objet `a`, puis | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																on l'appelle avec l'argument `10` à la ligne suivante. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Le code suivant fait exactement la même chose, mais avec une ligne de moins: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																a.x(10) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On peut *créer* des attributs dans *n'importe quel objet*, en utilisant l'*assignation*: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance = MonObjet() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Création de l'attribut `x` dans `mon_instance` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.x = 42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Accés à l'attribut `x` dans `mon_instance` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.mon_attribut | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Méthodes - définition | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On peut aussi mettre des *méthodes* dans des classes. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On utilise `def`, comme pour les fonctions, mais les méthodes *doivent* avoir au | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																moins un argument appelé `self`, et être à l'intérieur du bloc de la classe: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																class MonObjet: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def ma_méthode(self): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        return 42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Méthodes - appel | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Une méthode ne peut être appelée que depuis une *instance* de | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																l'objet: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																class MonObjet: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def ma_méthode(self): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            return 42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> ma_méthode() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Erreur | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance = MonObjet() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.ma_méthode() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Notez qu'on ne passe *pas* d'argument quand on apelle `ma_méthode` depuis l'instance de l'objet. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Méthodes et attributs | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																`self` *prend la valeur de l'instance courante* quand la méthode est appelée. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On peut le voir en utilisant des attributs: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																class MonObjet: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def affiche_attribut_x(self): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        # Accès à l'attribut `x` dans `self` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        print(self.x) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance = MonObjet() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.x = 42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.affiche_attribut_x() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On peut aussi *créer* des attributs dans une méthode: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																class MonObjet: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def crée_attribut_x(self): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        self.x = 42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def affiche_attribut_x(self): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        print(self.x) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance = MonObjet() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.affiche_attribut_x() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Erreur: `mon_instance` n'a pas d'attribut `x` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.crée_attribut_x() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.affiche_attribut_x() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Les méthodes peuveunt aussi prendre plusieurs arguments, en plus de `self` - mais `self` doit | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																toujours être le premier argument. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Par example, pour créer un attribut avec une certaine valeur: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																class MonObjet | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def crée_attribut_x(self, valeur_de_x): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        self.x = valeur_de_x | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def affiche_attribut_x(self); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        print(self.x) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance = MonObjet() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.crée_attribut_x(42) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.affiche_attribut_x() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																42 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Méthodes appelant d'autres méthodes | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Comme les méthodes sont *aussi* des attributs, les méthodes d'un objet peuvent s'appeler | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																les unes les autres: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																class MonObjet: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def méthode_1(self): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        print("démarrage de la méthode 1") | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        print("la méthode 1 affiche bonjour") | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        print("bonjour") | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        print("fin de la méthode 1") | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def méthode_2(self): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        print("la méthode 2 appelle la méthode 1") | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        self.méthode_1() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        print("fin de la méthode 2") | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance = MonObjet() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.méthode_2() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```text | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																la méthode 2 appelle la méthode 1 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																démarrage de la méthode 1 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																la méthode 1 affiche bonjour | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																bonjour | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																fin de la méthode 1 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																fin de la méthode 2 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Une méthode spéciale | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Si vous définissez une méthode `__init__`, celle-ci est appelée *automatiquement* | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																quand l'objet est construit. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On dit que c'est une méthode "magique" parce qu'elle fait quelque chose _sans_ qu'on | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																l'appelle explicitement. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On utilise souvent `__init__` pour créer des attributs | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																class MonObjet: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def __init__(self): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        self.x = 1 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        self.y = 2 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance = MonObjet() | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# __init__ est appelée automatiquement! | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.x | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																1 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.y | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																2 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On prend souvent les *valeurs* des attributs à créer en arguments de la méthode `__init__ `. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																```python | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																class MonObjet: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    def __init__(self, x, y): | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        self.x = x | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        self.y = y | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Dans ce cas, les arguments de la méthode `__init__` apparaissent à l'intérieur des parenthèses après le | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																nom de la classe: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance = MonObjet(3, 4) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.x | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																3 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																>>> mon_instance.y | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																4 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																``` | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																*Pour cette  raison, `__init__` est souvent appelé le _constructeur_ de la classe.* | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Récapitulatif | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* Classe: plan de construction | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* Objet: ce qu'on crée avec le plan | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* Attribut: variable dans un objet | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* Instance: objet issue d'une classe | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* Méthode: fonction dans une classe (qui prend `self` en premier argument) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																* `__init__`: méthode magique appelée automatiquement pendant l'instaciation | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																# Classes et programmation orienté objet | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Ainsi, on peut ranger au même endroit des données et des fonctions opérant sur ces donées. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																Les donées sont les attributs, et les fonctions opérant sur ces attributs sont les méthodes. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																On peut ainsi séparer les *responsabilités* à l'intérieur d'un code en les répartissant | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																entres plusieurs classes. | 
																 | 
																 | 
																 |