Vous n'êtes pas identifié(e).
Pages : 1
Bonjour, Bonsoir
Aujourd'hui je partage avec vous une petite classe event (très basique j'en convient) que j'ai codé d’après ce que j'ai put voir et apprendre des events ; ainsi que son implémentation dans un programme codé sous python3.4
[== Indéfini ==]
#!/usr/bin/env python3.4
#! -*- coding: utf-8 -*-
class Event(object):
callbacks = {} #contient les callbacks par raport aux events
all_events = [ #contient les events qui devront etre detecté (liste simple)
"e1",
"e2",
"e3",
"e4"]
def __init__(self, evtype, src, target, Args=None):
self._evtype = evtype
self._src = src
self._target = target
if Args:
self._Args = Args
else:
self._Args = []
def get_evtype(self): #retourne le type d'event (autrement dit: e1 e2 e3 ....)
return self._evtype
def get_src(self): #retourne qui a declancher l'event
return self._src
def get_target(self): #la cible de l'event
return self._target
def get_Args(self): # argument eventuel de l'event
return self._Args
def add_a_event(self, eventname, callback): #ajoute un event au tableau de callbacks
if self.callbacks is None:
self.callback = {}
if eventname not in self.callbacks:
self.callbacks[eventname] = [callback]
else:
self.callbacks[eventname].append(callback)
def handle_event(self, eventname): #gere un event
if self.callbacks is not None and eventname.get_evtype() in self.callbacks:
for callback in self.callbacks[eventname.get_evtype()]:
callback(self, eventname)
class uneclasse(object): #classe principale
def __init__(self):
self.ev = Event("", "", "") #ajout d'un atribut event
def add_events(self): #construction du tableau de callbacks via l'attribut event
for E in self.ev.all_events:
m = "on_" + E
self.ev.add_a_event(E, getattr(self, m))
def on_e1(self, adr, e): #se produit quand un event e1 est declanché (ici adr renvoie une adresse memoire valable pour tout les on_<event>)
print("e1")
def on_e2(self, adr, e):
print("e2" + str(e.get_src()))
def run(self):#fonction principale methode pricipale
self.add_events() #construction du tableau de callbacks
self.ev.handle_event(Event("e1", "toto", None))
self.ev.handle_event(Event("e2", "titi", None))
self.ev.handle_event(Event("e3", "tata", None))
self.ev.handle_event(Event("e4", "tutu", None, "un parametre eventuel"))
class autreclasse(uneclasse): #classe crée par heritage de uneclasse
def on_e4(self, adr, e):
print("e4" + " " + te.get_Args())
class classefinale(autreclasse):
def on_e3(self, adr, e):
print("e3")
if __name__ == "__main__":
a = classefinale()
a.run()
Cette classe s'adresse d'avantage a des personne étant plutôt perdus avec les events (comme moi au départ) ou aux débutants en python plutôt qu’aux programmeurs chevronnés
cette classe peut surement être améliorée (mes connaissances en python n’étant pas celle d'un programmeur pro) .
Partant du principe que toute critique positive ou négative est bonne a prendre (du moment qu'elle reste constructive), je vous invites a donner votre avis.
Aussi si vous avez des suggestions pour l’améliorer je suis preneur (toute connaissance supplémentaire est bonne a prendre non ? )
d'avoir lut
PS: j’espère que je poste au bon endroit.
Dernière modification par Cyb3r (27-07-2015 17:59:29)
Hors ligne
Pages : 1