Écriture de notre classe en POO
Notion sur la POO en Python#
Le framework Processing utilise le concept de la Programmation Orientée Objet. Il existe un tutoriel sur le site d'OpenClassRooms sur le sujet.
Mais depuis le début de la formation, nous l'utilisons sans trop le savoir. Les objets Qgs*
, comme
QgsVectorLayer
utilisent le principe de la POO.
On a pu créer des objets QgsVectorLayer en appelant son constructeur :
1 2 3 |
|
et ensuite, on a pu appeler des méthodes sur cet objet, comme :
1 2 |
|
Tip
Vous pouvez relire le passage sur la POO en début de formation.
Exemple#
Nous allons faire un "très" petit exemple rapide. Écrivons notre premier jeu vidéo en console ! 🎮
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
Utilisation de notre classe#
dir(a)
est une fonction indique les "membres" de notre variable Personnage.help(a)
affiche la documentation de notre classe__dict__
est une propriété qui donne les valeurs des attributs de l'instance.
1 2 3 |
|
Que remarquons-nous ?
Solution
1 2 3 4 5 |
|
Afficher le nom du personnage (et juste son nom, pas la phrase de présentation)
Ajouter d'autres méthodes#
Ajoutons une méthode dialoguer
pour discuter avec un autre personnage.
Tip
1 2 3 |
|
- Écrire le code la fonction à l'aide d'un
print
pour commencer disant queX dialogue avec Y
. - Vérifier le niveau d'énergie avant de dialoguer ! Difficile de discuter si on n'a plus d'énergie 😉
- Garder son code à gauche, on peut utiliser une instruction
return
Nous pouvons désormais utiliser le constructeur afin de créer deux instances de notre classe.
1 2 |
|
Solution pour la méthode dialoguer()
1 2 3 4 5 6 |
|
Continuons notre classe pour la gestion de son inventaire. Admettons que notre personnage puisse ramasser des objets afin de les mettre dans son sac à dos.
- Il va falloir ajouter une nouvelle propriété à notre classe de type
list
que l'on peut nommerinventaire
. Par défaut, son inventaire sera vide. - Ajoutons 3 méthodes :
ramasser
,deposer
etutiliser
. Pour le moment, pour faciliter l'exercice, utilisons une chaîne de caractère pour désigner l'objet. Ces méthodes vont interagir avec notreinventaire
à l'aide des méthodesremove()
,append()
que l'on trouve sur une liste. - Pour les méthodes
deposer
etutiliser
, nous pouvons avoir à créer une autre méthode privée afin de vérifier l'existence de l'objet dans l'inventaire. Par convention, nous préfixons la méthode par_
comme_est_dans_inventaire
afin de signaler que c'est une méthode dite privée. L'utilisation de cette méthode privée est uniquement à titre pédagogique, on peut vouloir exposer la méthodeest_dans_inventaire
. Cette méthode doit renvoyer un booléen. - Ajoutons des commentaires et/ou des docstrings, CF mémo Python. On peut utiliser la méthode
help
. -
Pensons aussi annotations Python
-
Refaire la commande
help(a)
pour voir le résultat final 😉
Info
Il est important de comprendre que la POO permet de construire une sorte de boîte opaque du point de vue de l'utilisateur de la classe. Un peu comme une voiture, elles ont toutes un capot et une pédale d'accélération. L'appui sur l'accélérateur déclenche plusieurs mécanismes à l'intérieur de la voiture, mais du point de vue utilisateur, c'est plutôt simple.
Tip
On peut vite imaginer d'autres classes, comme Arme
, car ramasser un bout de bois ou un sabre laser n'a pas le même
impact lors de son utilisation dans un combat. Le dégât qu'inflige une arme sur le niveau d'énergie de l'autre
personnage est une propriété de l'arme en question et du niveau du personnage.
Des idées pour continuer plus loin#
Des jeux en Python dans QGIS :
- Une vidéo du jeu morpion
- Le jeu Snake
Ou pour le fun avec des expressions :
Solution#
Sur la classe Personnage ci-dessus :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|