bonjour,
je ne suis pas un pro du python mais j'ai voulu faire un notificateur a la mode event du c# (enfin en version plus simple)
bref
j'ai ce code
j'ai pas mis tt la classe le reste est sans importance
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 class Updater: fluxs = [] def __init__(self, parking, pkname, logger = None): print("> Updater constructeur") self.name = pkname self.onPark = parking['OnPark'] self.totalPark = parking['TotalPark'] self.logger = logger def __del__(self): print("> Updater descturcteur") self.__save() def __iadd__(self, fluxToAdd): if not issubclass(fluxToAdd.__class__, BaseRunningFlux): raise Exception(f"{fluxToAdd.__class__.__name__} n'herite pas de BaseRunningFlux") fluxToAdd.notifyFunc = self.changed self.fluxs.append(fluxToAdd) return self def __save(self): if os.path.exists(self.name): try: with open(self.name , 'w') as f: f.write(f"{{\n") f.write(f"\t\"OnPark\": {self.onPark},\n") f.write(f"\t\"TotalPark\": {self.totalPark}\n") f.write(f"}}\n") f.close() except Exception as error: raise error
bref quand j'ajoute un objet qui hérite de BaseRunningFlux je lui colle une fonction pour qu'il me notifie ses changements de valeur a la classe parent via sa fonction changed
avec un truc dans ce style
sauf que quand je fais un del sur ma classe
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 class BaseRunningFlux: @abstractmethod def __init__(self): self.notifyFunc = None self.count = 0 def __del__(self): self.notifyFunc = None @property def notifyFunc(self): return self._notifyFunc @notifyFunc.setter def notifyFunc(self, value): self._notifyFunc = value @property def count(self): return self._count @count.setter def count(self, value): self._count = value if not self.notifyFunc is None: self.notifyFunc(self) def reset(self): self._count = 0 class RunnigFlux(BaseRunningFlux): def __init__(self): BaseRunningFlux.__init__(self)
il n'est pas réalisé a ce moment la mais a la fin du logiciel
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 upd = Updater(parking, parkname) print(f"etat parking : {upd}") f = RunnigFlux() f.count = 5 upd += f print(f"etat parking : {upd}") f = RunnigFlux() f.count = -3 upd += f print(f"etat parking : {upd}") print() print("test ajouter par ++") f.count += 1 f.count += -1 # Reinit print() print() reinit = 12 print(f"REINIT a {reinit}") upd.reinit(reinit) print(f"etat parking : {upd}") #upd += Dummy() print("avant destructeur") del upd print("apres destructeur")
or comme je sauve un fichier la fonction open ne plus accessible
et si je désactive la ligne #fluxToAdd.notifyFunc = self.changed
la le del est fait a ce moment la
bref je comprends pas trop
Partager