Idee für ein Eventsystem...
Verfasst: Dienstag 12. Juli 2011, 13:42
Hallo,
bislang habe ich nach verschiedenen Ereignissen einfach Instanzen vonaufgerufen. Das wird mir jetzt aber etwas zu unflexibel und zu unübersichtlich.
Ich habe mir daher überlegt, 'Event()' folgendermaßen umzubauen:
1. Ein potentieller Event wird angemeldet, z. B. 'APP_CHANGE' und mit callback(s) verbunden.
2. 'Event()' erhält eine Methode 'trigger', die ich dann an verschiedenste Exemplare weitergebe.
3. Wird z. B. in der Klasse 'Appointment()' ein Termineintrag geändert, wird über 'trigger' samt Parameter 'APP_CHANGE' die/der dazugehörige(n) callback(s) aufgerufen.
Was ist davon zu halten?
bislang habe ich nach verschiedenen Ereignissen einfach Instanzen von
Code: Alles auswählen
class Event(object):
#irgendwann mal von BlackJack bekommen...
def __init__(self):
self.callbacks = set()
def __call__(self, *args, **kwargs):
for callback in self.callbacks:
callback(*args, **kwargs)
def add(self, listener):
self.callbacks.add(listener)
def remove(self, listener):
self.callbacks.remove(listener)
Ich habe mir daher überlegt, 'Event()' folgendermaßen umzubauen:
1. Ein potentieller Event wird angemeldet, z. B. 'APP_CHANGE' und mit callback(s) verbunden.
2. 'Event()' erhält eine Methode 'trigger', die ich dann an verschiedenste Exemplare weitergebe.
3. Wird z. B. in der Klasse 'Appointment()' ein Termineintrag geändert, wird über 'trigger' samt Parameter 'APP_CHANGE' die/der dazugehörige(n) callback(s) aufgerufen.
Code: Alles auswählen
class Event(object):
def __init__(self):
self.events = {}
def new_(self, name, listener):
self.events[name] = set([listener])
def add(self, name, listener):
self.events[name].add(listener)
def remove(self, name, listener):
self.events[name].remove(listener)
def trigger(self, name, *args, **kwargs):
for callback in self.events[name]:
callback(*args, **kwargs)