POO: self en argument d'un appel d'une méthode
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): " ?
Code:
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() |
Merci