Créer une classe pas à pas
Un exemple pas à pas
Nous allons commencer par écrire une classe Personnage (qui sera dans un premier temps une coquille vide) et, à partir de cette classe créer 2 instances : bilbo et gollum.
Exécutez ce code. Observez le type des variables gollum et bilbo
Les classe (ou objets) sont des types personnalisés
Pour l'instant, notre classe ne sert à rien et nos instances d'objet ne peuvent rien faire. Comme il n'est pas possible de créer une classe totalement vide, nous avons utilisé l'instruction pass qui ne fait rien. Ensuite nous avons créé 2 instances de la classe Personnage : gollum et bilbo.
La méthode __init__
Les attributs de l'objet doivent être définis dans la classe, à l'aide d'une méthode d'initialisation des attributs.
Une méthode particulière, nommée LE CONSTRUCTEUR, permet de définir les attribut dès l'instanciation d'un objet.
Cette méthode est définie dans le code source par la ligne :
def __init__ (self) :
Rappel : La méthode __init__ est automatiquement exécutée au moment de la création d'une instance. Le mot self est obligatoirement le premier argument d'une méthode.
Le mot self représente l'instance. Quand vous définissez une instance de classe (bilbo ou gollum) le nom de votre instance va remplacer le mot self.
Dans le code source, nous allons avoir :
class Personnage:
def __init__ (self):
self.vie = 20
Ensuite lors de la création de l'instance gollum, python va créer un attribut vie de la variable gollum.
Cet attribut aura aura pour valeur de départ la valeur donnée à self.vie dans la méthode __init__
Il se passera exactement la même chose au moment de la création de l'instance bilbo, on aura automatiquement la création de l'attribut vie de la variable bilbo.
Exécutez ce code, et dans la console, faites afficher les valeurs de gollum.vie et bilbo.vie
Imaginons que nos 2 personnages n'aient pas au départ les mêmes points de vie ! Pour l'instant, impossible d'introduire cette contrainte (self.vie = 20)
Une méthode, comme une fonction, peut prendre des paramètres (des arguments).
Le passage de paramètres se fait au moment de la création de l'instance. Modifiez le code pour que le nombre de vies soit un paramètre dont la valeur sera fixée lors de l'instanciation.
Au moment de la création de l'instance gollum, on passe comme argument le nombre de vies (gollum = Personnage (15)).
Nous pouvons passer plusieurs arguments à la méthode __init__ (comme pour n'importe quelle fonction).
Améliorons en ajoutant d'autres méthodes
Vous avez sans doute remarqué que lors de "l'utilisation" des instances bilbo et gollum, nous avons uniquement utilisé des méthodes et nous n'avons plus directement utilisé des attributs (plus de "gollum.vie"). Il est important de savoir qu'en dehors de la classe l'utilisation des attributs est une mauvaise pratique en programmation orientée objet : les attributs doivent rester "à l'intérieur" de la classe, l'utilisateur de la classe ne doit pas les utiliser directement. Il peut les manipuler, mais uniquement par l'intermédiaire d'une méthode (la méthode self.perdVie() permet de manipuler l'attribut self.vie)
Passer des arguments à nos méthodes
Selon le type d'attaque subit, le personnage peut perdre plus ou moins de points de vie. Pour tenir compte de cet élément, ajoutez un paramètre à la méthode perdVie.
Il est bien entendu possible d'utiliser la librairie random pour ajouter une part d'aléatoire dans la méthode perdVie.
Dans une méthode vous pouvez utiliser toutes les instructions que vous connaissez déjà en paradigme impératif. Modifiez de nouveau le code, cette fois la méthode perdVie doit être écrite de façon à ne jamais renvoyer un nombre de vie négatif. Si le nombre de vie est négatif, nombre de vie sera mis à 0.