CHAPITRE 1
Un premier objet⚓︎
En Python, on définit un objet en utilisant le mot clé class
et en lui donnant un nom. Notre premier objet s'appelle Jeu
:
class Jeu:
pass
L'instruction pass
sert juste à dire à Python qu'il n'y a rien à faire. Il nous faut un programme principal, ie un ensemble d'instructions que l'interprète Python va exécuter. Ici on veut simplement créer un exemplaire de notre jeu. En programmation on appelle instance un exemplaire d'un objet.
Pour créer cette instance, nous faisons ceci :
Jeu()
Les parenthèses sont là pour dire que nous allons construire une instance de l'objet Jeu
. D'autre part, nous allons donner un nom à cette instance, pour, plus tard, pouvoir la nommer et éventuellement lui demander des choses.
En langage Python, pour nommer un objet, on écrit ce nom, qu'on appelle un identificateur puis on écrit le symbole = et enfin l'objet qu'on est en train de nommer. Dans notre cas, l'objet est une instance de Jeu
réalisée par Jeu()
, et pour le nom appelons le snake
. Ce qui donne :
snake = Jeu()
Jeu()
joue le rôle de constructeur, il nous permet de construire des instances de l'objet Jeu
.
Astuce
Notez bien la différence, sans parenthèses : l'objet ; avec parenthèses l'appel au constructeur.
Premier programme⚓︎
À faire vous-même
Avec votre environnement de programmation, créez un nouveau fichier, que vous pouvez nommer snake_00.py
(l'extension .py signifie qu'il s'agit d'un programme Python) et saisissez-y le code suivant :
class Jeu:
pass
snake = Jeu()
Exécutez-le. Il ne devrait rien se passer
À faire vous-même
Reprenez votre programme snake_00.py
et effectuez les changements suivants :
- Supprimez les
:
, sauvegardez et exécutez le programme... - Supprimez l'indentation, sauvegardez et exécutez...
- vous avez du avoir un message d'erreur du genre :
File "/un/chemin/vers/votre/snake_00.py", line 1 class Jeu ^ SyntaxError: invalid syntax
- vous avez du obtenir une autre erreur :
File "/un/chemin/vers/votre/snake_00.py", line 2 pass ^ IndentationError: expected an indented block
Les concepts
- Règles de syntaxes, bonnes pratiques
- Notion de programme et d'instruction
- Objet, valeur et type
- Identifiant, variable, référence
- Affectation
Améliorer le programme⚓︎
Ce premier programme ne faisait rien du tout. Nous allons l'améliorer un peu pour qu'il affiche Coucou
à l'écran.
À faire vous-même
Avec votre environnement de programmation, créez un nouveau fichier, que vous pouvez nommer snake01.py
saisissez-y le code suivant :
class Jeu:
def annonce(self):
print('Coucou')
snake = Jeu()
snake.annonce()
Exécutez-le.
Notre nouveau programme manipule beaucoup plus de choses que le premier :
- une méthode :
annonce
c'est une action que peut effectuer notre objetJeu
.snake.annonce()
est l'instruction qui permet à notreJeu
snake
d'exécuter son action, on dit qu'il invoque la méthodeannonce
. Cette méthode effectue quant à elle un appel à ... - une fonction prédéfinie
print
: il s'agit d'une fonction connue par l'interprète Python (un peu comme votre calculatrice connait la fonction cosinus) et qui effectue l'affichage à l'écran de ce qu'on lui donne - une chaine de caractères
'Coucou'
qui est donc ce qu'on donne à la fonctionprint
à afficher ; on dit que'Coucou'
est un argument
Les concepts
- Fonction prédéfinie
- Chaine de caractères
- Appel de fonction, passage d'argument
Nouveaux objets⚓︎
Les chaines de caractères (comme 'Coucou'
) sont connues par Python sous le nom de str
. On parle de type. Ainsi 'Coucou'
est de type str
.
Est-ce que snake
est aussi une str
? Pas du tout.
Ne pas confondre identificateur et str
Comment les différencier ?
La chaine de caractères commence toujours par un délimiteur c'est-à-dire un ou plusieurs symboles qui vont marquer le début de la chaine et qu'on retrouvera à la fin, pour marquer la fin de la chaine. Les délimiteurs possibles sont :
- l'apostrophe ou quote en anglais :
'Hello'
, - les guillemets ou double quote :
"Ceci est une autre chaine un peu plus longue"
- les triple (double) quote :
Parfois on doit faire attention au choix du délimiteur ; dans l'exemple ci-dessous, notre chaine contient une apostrophe : nous ne pouvons donc pas nous en servir comme délimiteur puisque Python ne saurait plus où se situe la fin de la chaine.
"""Ceci est une longue longue chaine sur plusieurs lignes !"""
'Lundi c'est ravioli'
Il faut utiliser les guillements ici :
"Lundi c'est ravioli"
Si vous avez un bon éditeur de texte alors la colorisation syntaxique (le fait que certains mots sont de couleur différente) devrait vous ader à détecter ce type d'erreur.
Abus de langage
Parfois, suite à une instruction d'affectation :
ma_chaine = 'Je programme en Python'
Vous pourriez entendre dire que ma_chaine
est de type str
ou est un str
... il s'agit d'un raccourci de langage pour dire que l'objet référencé par la variable ma_chaine
est de type str
.
En Python, les variables ne sont pas typées, seul les objets le sont.
Une troisième version⚓︎
Le rôle des méthodes et fonctions, c'est de rendre le programme modulaire et personnalisable. Par exemple ici, ce serait sympa, au moment de la création du Jeu
de choisir si la méthode annonce
va afficher Coucou
ou bien Hello
ou encore Bonjour
... Nous allons rajouter une propriété à notre objet et c'est la valeur de cette propriété qui sera utilisée.
Il nous faut un identifiant, par exemple message
. Pour ajouter une propriété, il nous faut définir une méthode particulière qui s'appelle initialiseur ; voici comment :
class Jeu:
def __init__(self, msg):
self.message = msg
Sans trop vouloir vous ennuyer avec la syntaxe pour le moment, mais comme nous allons les rencontrer tout au long de cette initiation, précisons un peu le rôle de quelques éléments :
- nos objets Python auront des propriétés, comme les objets du quotidien
- ils ont aussi des méthodes qu'ils peuvent invoquer pour réaliser des actions, ces méthodes sont techniquement des fonctions
__init__
est une méthode particulière : c'est la première rencontrée et elle permet d'initialiser les propriétés de notre objetself
représente l'objet lui-même ; ce petit identificateur doit être le premier paramètre de toutes les méthodes.
Les concepts
- Définition de fonction avec paramètres
- Précisions sur le vocabulaire de la POO
Notre méthode annonce
doit subir un petit changement aussi pour tenir compte que maintenant il ne faut pas afficher systématiquement la chaine de caractères Coucou
, mais la chaine de caractères qui sera référencée par self.message
:
class Jeu:
...
def annonce(self):
print(self.message)
Dès lors, le programme principal devient :
snake = Jeu('Salut')
snake.annonce()
Et on pourrait même envisager la création de 2 instances, un peu différentes
À faire vous-même
Dans un fichier snake_02.py
définir une classe Jeu
comme vu précédemment puis un programme principal qui crée deux instances différentes et qui invoque chacunes leur méthode annonce
.
class Jeu:
def __init__(self, msg):
self.message = msg
def annonce(self):
print(self.message)
snake = Jeu('Coucou')
autre_jeu = Jeu('Bonjour le monde !')
snake.annonce()
autre_jeu.annonce()