Salut,
Pour cela, il existe un modèle qui s'appel MCV ; Pour "Modèle Vue Contrôleur". Quasiment toutes les applications sont développées sur ce modèle. Pour faire simple, tu as plusieurs "Objets" : des objets observateurs (qui attendent des changement d'état) et des objets observés.
Exemple d'un objet observé :
Code Python :
#!/bin/python
# -*- coding: utf-8 -*-
class Observed :
#Créer un nouvel objet "Observed"
def __init__ (self, name) :
self._name = name
self.listObservers = []
self.maVariable = ""
return
#On ajoute de nouveaux observateurs
def addObserver (self, observer) :
self.listObservers.append(observer)
return
#On peut aussi en supprimer..
def removeObserver (self, observer) :
self.listObservers.remove(observer)
return
#Lors que ta variable va changer d'état on
#appel cette fonction qui est chargé d'en
#avertir les observateurs; On leur précise
#que c'est cet objet qui a changé d'état..
def notifying (self) :
for o in self.listObservers :
o.stateChanged(self)
return
#Ici on change l'état de la variable
def setVariable (self, newValue) :
#Hop, la variable a changé d'état
self.maVariable = newValue
#On averti les autres !
self.notifying()
return
#On permet à l'utilisateur de récupérer la nouvelle valeur
def getVariable (self) :
return self.maVariable
Exemple d'un objet observateur :
Code Python :
#!/bin/python
# -*- coding: utf-8 -*-
class Observer :
#Créer un nouvel objet observateur
def __init__ (self, name) :
self._name = name
return
#La fonction qui est appellée par l'observé lorsqu'il à changé..
def stateChanged (self, object) :
newValue = object.getVariable()
print(str(self._name) + " observing " + str(object._name) + " has detected a change : new value = " + str(newValue))
return
#On s'ajoute parmis les observateurs de "object"..
def observing (self, object) :
object.addObserver(self)
return
Et enfin le Main :
Code Python :
#!/bin/python
# -*- coding: utf-8 -*-
#On import les modules créer
import Observer
import Observed
#code principal de l'application
if __name__ == "__main__" :
#On créer deux objets qui vont être observés
observed1 = Observed.Observed("Observed1")
observed2 = Observed.Observed("Observed2")
#On créer deux observateurs
observer1 = Observer.Observer("Observer1")
observer2 = Observer.Observer("Observer2")
#Le premier observateur doit observer "observed1" et "observed2"
observer1.observing(observed1)
observer1.observing(observed2)
#Le deuxième observateur doit observer "observed2"
observer2.observing(observed2)
#On applique un nouvelle valeur aux variables de "observed1" et "observed2"
observed1.setVariable("new 1 !")
observed2.setVariable("new 2 !")
A l'exécution de ce code, à quoi est-ce qu'on s'attend ?!
=> un message de la part de "observer1" a propos de "observed1" et "observed2"
=> et un message de la part de "observer2" de la part de "observe2"
Je reconnais le modèle MVC peut paraitre un peu compliqué, mais il est beaucoup plus efficace ..
Ou sinon tu as toujours une méthode un peu plus archaïque : tu mets le teste dans une boucle sans fin que tu places dans un Thread pour ne pas bloque le programme sur la boucle..
PS : Si tu souhaites exécuter ce code, il faut placer chacune des classes dans un module différent, portant le nom de la classe qu'il contient (en respectant la case ..).