Bonjour,
Je lis un bouquin sur la POO qui présente entre autre quelques exemples en python.
Sur un exemple parlant de la cardinalité qui explicite les interactions entre les instances de deux classes différentes, il donne le code écrit ci dessous.
Je ne comprends pas :
- unInstrument.setMusicien(self)
Si on regarde dans la classe Instrument, la méthode setMusicien a pour argument (self,monMusicien).
On n'a pas mon musicien lors de son appel, pourquoi est ce que cela marche ?
Il ne me semble pas avoir vu de self jusqu'à présent en appel d'une méthode, seulement lors de sa définition
Pourquoi ne pas écrire : unInstrument.setMusicien(self.__nom) ? Cela fonctionne bien et cela me parait logique
- Dans la classe Instrument, c'est quoi le "type" en argument du constructeur " def __init__(self,type): " ?
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 class Musicien: __mesInstruments = [] #declaration de la liste, difficile de faire plus simple __nom = None def __init__(self,nom): self.__nom = nom def addInstrument(self,unInstrument): self.__mesInstruments.append(unInstrument) # ajout d un element a la liste unInstrument.setMusicien(self) def printInstrument(self): for x in self.__mesInstruments: #instruction tres elegante egalement print(x) def __str__(self): return self.__nom #definit ce qui apparait quand on appele le referent de l objet class Instrument: __monMusicien = None __type = None def __init__(self,type): self.__type = type def setMusicien(self,monMusicien): self.__monMusicien = monMusicien def printMusicien(self): print(self.__monMusicien) def __str__(self): return self.__type guitare = Instrument("guitare") #banjo = Instrument("banjo") django = Musicien("django") django.addInstrument(guitare) #django.addInstrument(banjo) django.printInstrument() guitare.printMusicien() #banjo.printMusicien()
Partager