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 : 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()
Merci