user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 27-07-2015 17:58:56

Cyb3r
Membre

Classe event simple en python

Classe event en python

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 ?  wink )

merci 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

Pied de page des forums