Vous êtes sur la page 1sur 2

Aide Jalon 01

marc-michel dot corsini at u-bordeaux dot fr


26 janvier 2024

Après avoir lu la fiche fiche_jalon01.pdf, on voit que la classe Strategy offre tous les services dont on a besoin
à l’exclusion de la méthode next_action.
Conclusion Toutes les classes dérivées de ce jalon doivent donc contenir la définition de cette méthode.
Quand on regarde le constructeur de la classe Straegy, on s’aperçoit qu’il dispose de trois paramètres :
1. Un style (défini par un entier à valeur dans {−1, 1, 0} qui par défaut vaut 1
2. Une taille mémoire maximale (définie par un entier à valeur dans Z, qui, par défaut vaut 0
3. Un modèle (défini par une instance de la classe Model) qui par défaut vaut m1 et qui correspond à l’utilisation
de deux actions “D” et “C” (pour duper et coopérer).
On comprend que, si la classe dérivée fonctionne avec des valeurs qui sont différentes d’une (ou plusieurs) valeurs
par défaut différentes des valeurs prédéfinies, il faudra réécrire le constructeur.
Quand on réécrit le constructeur d’une classe fille, il faut penser à appeler le constructeur de la classe parente. Deux
manières de faire (en python) :
1. Sans se préoccuper du nom de la classe parente, on « invoque » son constructeur en utilisant la syntaxe

super().__init__(params)

2. En supposant connue le nom de la classe parente (ici Parente), on invoque son constructeur par

Parente.__init__(self, params)

Pour cette fiche, il va donc falloir, pour chaque nouvelle classe, se poser la question :
« Quels sont les valeurs des paramètres qui ne sont pas les valeurs par défaut du constructeur de la classe Strategy ? »

Rappel le modèle ayant 2 actions est m1 ; le modèle gérant 3 actions est m2.

1 Classes dérivées
Pour chaque classe, pour chaque paramètre du constructeur de la classe Stratetgy – Les trois paramètres sont : styl,
memsz et model (notez la minuscule, ce n’est pas le type mais le nom du paramètre). – on vous donne s’il s’agit du
paramètre par défaut ou pas :
• Gentle oui, oui, oui
• Bad non, oui, oui
• Fool non, oui, oui
• Human non, oui, non
• GentleSulky oui, non, non
• BadSulky non, non, non
• FoolSulky non, non, non

1
• Tit4Tat oui, non, oui
• WinStayLooseShift oui, non, oui

• Pavlov oui, non, oui


Pour chaque classe, pour chaque paramètre de la classe Strategy, on vous indique s’il est imposé ou pas :
• Gentle oui, oui, oui

• Bad oui, oui, oui


• Fool oui, oui, oui
• Human oui, oui, non
• GentleSulky oui, oui, oui

• BadSulky oui, oui, oui


• FoolSulky oui, oui, oui
• Tit4Tat oui, oui, non

• WinStayLooseShift oui, oui, non


• Pavlov oui, oui, non
On voit que pour toutes les classes, sauf la première Gentle il va falloir redéfinir le constructeur. Afin de ne
pas être surmené, le constructeur que l’on écrit ne doit prendre en compte que les paramètres utiles c’est-à-dire qui
peuvent être modifiés par l’utilisateur (voir fiche_jalon01). L’en-tête du constructeur sera, ainsi, pour chaque classe :

def __init__(self, params_modifiables=val_defaut):


Ce qui changera, sera donc la commande invoquant le constructeur de la classe parente. Par exemple :
• Bad : aucun paramètre modifiable, son constructeur sera

def __init__(self):

• Human : peut travailler sur différents modèles, mais par défaut travaille avec m1

def __init__(self,le_modele:Model=m1):

Le constructeur de la classe Strategy accepte 3 paramètres nommés styl, maxsz et model. Quand on souhaite
modifier les 3 paramètres avec les informations v1, v2, v3. Il suffit d’appeler le constructeur avec les informations dans
l’ordre super().__init__(v1, v2, v3) Mais lorsqu’on souhaite ne modifier que certaines valeurs, par exemple
celle de maxsz, on va utiliser le nom du paramètre pour lui affecter la valeur souhaitée :
super().__init__(maxsz=v2)

Vous aimerez peut-être aussi