Pour terminer avec les objets, il nous reste une notion importante à aborder : l'héritage.

Nous allons créer une nouvelle classe (la classe magicien) qui héritera de la classe personnage (on dira que la classe magicien sera la classe fille et personnage sera la classe parente).

Pour une fois, ce terme d'héritage est bien approprié à la situation. En effet la classe magicien va hériter de toutes les méthodes et de tous les attributs de la classe personnage (une instance de magicien aura un nom et des points de vie, comme une instance de personnage, et pourra utiliser les méthodes de la classe personnage). Alors quel est l'intérêt de créer une nouvelle classe ? Eh bien, l'instance de magicien aura un attribut supplémentaire (magie) et une méthode supplémentaire (faireMagie). En tout, une instance de magicien aura 3 attributs (2 hérités de la classe personnage (vie et nom) et 1 qui lui est propre (magie)) et 3 méthodes (2 hérités de la classe personnage et 1 propre)

La mise en place de l'héritage est très simple, puisqu'il suffit de remplacer object par le nom de la classe parente, dans notre exemple on définira la classe magicien comme suit :


class magicien (personnage)
			

À faire vous même 5.1

Saisissez, analysez et testez ce code


#!/usr/bin/env python
# -*- coding: utf-8 -*-
class personnage(object):
    #méthode __init__ avec 2 arguments (sans compter self !) le nombre de vies et le nom du personnage
    def __init__(self, nbreDeVie, nomDuPerso):
        self.vie=nbreDeVie
        self.nom=nomDuPerso
    #voici la méthode qui affiche le nombre de vies du personnage.
    def affichePointVie (self):
        print ('Il reste '+str(self.vie)+' points de vie à '+self.nom)
    #voici la méthode qui fait perdre 1 point de vie au personnage qui a subi une attaque
    def perdVie (self):
        print (self.nom+' subit une attaque, il perd une vie')
        self.vie=self.vie-1
#la classe magicien hérite de la classe personnage
class magicien(personnage):
    #dans def_init_ on retrouve nbreDeVie et nomDuPerso comme dans le def __init__ de la classe personnage
    def __init__(self, nbreDeVie, nomDuPerso, pointMagie):
        #la ligne suivante est très importante dans le cas d'héritage, il faut systématiquement faire ce genre d'appel :
        #classeparente.__init__(self,arg1,arg2.....)
        personnage.__init__(self, nbreDeVie, nomDuPerso)
        #le seul nouvel attribut est self.magie, tous les autres sont hérités de la classe personnage
        self.magie=pointMagie
    #une méthode uniquement disponible pour les instances de magiciens
    def faireMagie (self):
        print (self.nom+' fait de la magie')
        self.magie=self.magie-1
        print ('Il reste '+str(self.magie)+' points de magie à '+self.nom+'.')
    #les autres méthodes des instances de magicien sont héritées de la classe personnage
#on crée une instance de magicien
gandalf=magicien(20,'Gandalf',15)
#applique la méthode affichePointVie à gandalf, cette méthode est héritée de la classe personnage
gandalf.affichePointVie()
#applique la méthode faireMagie à gandalf, cette méthode est uniquement applicable aux instances de la classe magicien
gandalf.faireMagie()