Bonjour à tous,
Je voulais savoir s'il était possible quand on surcharge un opérateur mathématique d'une classe (par exemple +) que le résultat se mette à jour automatiquement?
imaginons que j'ai la classe Nombre (ce n'est pas mon vrai exemple, mais je simplifie pour se concentrer sur l'essentiel)
donc quand je l'utilise:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class Nombre(): def __init__(self,valeur): self.valeur = valeur def mettre_a_jour(self, new_value): self.valeur = new_value def __str__(self): return "{}".format(self.valeur) def __add__(self, other): valeur = self.valeur + other.valeur return Nombre(valeur)
je voudrais que c soit mis à jour automatiquement quand a est mis à jour.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 a = Nombre(1) b = Nombre(2) c = a + b print(c) ### affiche 3 ### a.mettre_a_jour(5) print(a) ###affiche 5### print(c) ###affiche 3###
actuellement j'utilise plutôt un code comme suit, mais que je voudrais simplifier si c'est possible:
la classe Observable à deux méthodes [ ajouter_observateur, notifier_observateurs]
donc quand je l'utilise, ça donne ça:
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 class Nombre(Observable): def __init__(self,valeur=0): self.valeur = valeur def mettre_a_jour(self, nouvelle_valeur): self.valeur = nouvelle_valeur self.notifier_observateurs() ### je notifie les observateurs def __str__(self): return "{}".format(self.valeur) class ResultatAddition(Nombre): def __init__(self, nombre1, nombre2): self.nombre1 = nombre1 nombre1.ajouter_observateur(self) ### j'ajoute mon objet à la liste des observateurs du nombre 1 self.nombre2 = nombre2 nombre2.ajouter_observateur(self) ### j'ajoute mon objet à la liste des observateurs du nombre 2 super().__init__(self) self.ajout() def additionner(self): self.valeur = nombre1.valeur + nombre2.valeur ### méthode obligatoire de l'objet observateur qui est appelée par notifier_observateurs def update(self): self.additionner()
Guillaume.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 a = Nombre(1) b = Nombre(2) c = ResultatAddition(a, b) print(c) ### affiche 3 ### a.mettre_a_jour(5) print(c) ### affiche 7 ###
Partager