Comme nous l'avons vu, nous pouvons créer de nouveaux robots en utilisant la notation :
Reeborg = UsedRobot()
Erdna = UsedRobot(2, 2)
Cependant, ces robots sont juste pareils à l'original qui n'a pas de nom : ils ne peuvent tourner qu'à gauche. Pour leur apprendre à tourner à droite, nous pouvons définir une fonction similaire à ce que nous avons déjà fait :
def Reeborg_turn_right():
for i in range(3):
Reeborg.turn_left()
Toutefois, il y a au moins deux problèmes avec cette façon de faire :
Une meilleure approche est de définir une nouvelle classe qui héritera de la classe UsedRobot. C'est ce que nous ferons dans la prochaine section.
Je vais d'abord vous montrer comment nous pouvons arranger notre robot pour qu'il sache tourner à droite, et je vous expliquerai ensuite ce que j'ai fait.
class RobotRetabli(UsedRobot):
def turn_right(synonyme_utilise_pour_se_rapporter_a_cet_objet):
for i in range(3):
synonyme_utilise_pour_se_rapporter_a_cet_objet.turn_left()
Voici comment nous pouvons utiliser cette nouvelle classe d'objets :
nouveauReeborg = RobotRetabli()
nouvelleErdna = RobotRetabli(2, 2)
nouveauReeborg.turn_left() # comme avant
nouveauReeborg.turn_right() # nouvelle méthode!
nouvelleErdna.turn_right() # celle-ci fonctionne aussi !
Et maintenant, c'est le moment d'expliquer. Le mot-clé Python class indique que nous allons définir un nouveau type de "fonction", une qui crée des objets. Ce qui suit class est : RobotRetabli(UsedRobot). RobotRetabli est le nom de notre nouvelle classe ; en écrivant UsedRobot entre les parenthèses, nous nous assurons que la nouvelle classe RepairedRobot hérite de toutes les méthodes et tous les attributs qu'avait UsedRobot. Donc, quand nous écrivons :
nouveauReeborg = RobotRetabli()
nous créons un nouveau robot "nommé" nouveauReeborg qui peut faire (au moins toutes) les mêmes choses que le vieux
Reeborg = UsedRobot()
pouvait faire.
Ensuite, à l'intérieur de la nouvelle classe, comme indiqué par le bloc indenté, nous définissons une nouvelle méthode, turn_right(). En la définissant à l'intérieur de la classe, nous franchissons la première étape pour nous assurer que tous les robots qui sont créés en appelant RobotRetabli() seront capables de tourner à droite !
La deuxième étape nécessaire est de dire à Python que la méthode va "appartenir" à l'objet
particulier qui a été créé. Pour cela, nous utilisons la variable synonyme_utilise_pour_se_rapporter_a_cet_objet
qui va se rapporter à nouveauReeborg, nouvelleErdna, etc., dépendamment de l'objet qui est créé. Quand nous écrivons
nouveauReeborg = RobotRetabli()
Python crée une nouvelle instance de la classe RobotRetabli et définit toutes les méthodes, en remplaçant le premier paramètre de la méthode (synonyme_utilise_pour_se_rapporter_a_cet_objet) par le nom de l'instance (nouveauReeborg).
Maintenant, synonyme_utilise_pour_se_rapporter_a_cet_objet est un nom plutôt long à taper. Par convention, un autre nom de variable est utilisé : self. Donc, pour suivre la convention normale, j'aurais dû écrire :
class RobotRetabli(UsedRobot):
def turn_right(self):
for i in range(3):
self.turn_left()