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
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
j'ai pas mis tt la classe le reste est sans importance
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
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)
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
 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")
il n'est pas réalisé a ce moment la mais a la fin du logiciel
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