Skip to content

Commit 0c5e582

Browse files
event emitter python
1 parent 598a10a commit 0c5e582

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

event-emitter/event-emitter.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
class EventEmitter:
2+
def __init__(self):
3+
self.events = {}
4+
5+
def subscribe(self, event, callback):
6+
if event in self.events:
7+
self.events[event].append(callback)
8+
else:
9+
self.events[event] = [callback]
10+
11+
def unsubscribe(self, event, callback=None):
12+
if event not in self.events:
13+
return
14+
15+
if not callback:
16+
self.events.pop(event, None)
17+
else:
18+
self.events[event] = list(
19+
filter(lambda c: c != callback, self.events[event]))
20+
21+
def emit(self, event, *args):
22+
if event not in self.events:
23+
return
24+
25+
for callback in self.events[event]:
26+
callback(*args)
27+
28+
29+
def print_callback(*args):
30+
for arg in args:
31+
print(arg)
32+
33+
34+
eventEmitter = EventEmitter()
35+
eventEmitter.subscribe("print", print_callback)
36+
eventEmitter.emit("print", "Hello World")
37+
eventEmitter.subscribe("print", print_callback)
38+
eventEmitter.emit("print", "Test")
39+
eventEmitter.unsubscribe("print")
40+
eventEmitter.emit("print", "Don't print")
41+
eventEmitter.subscribe("print", print_callback)
42+
eventEmitter.emit("print", "Print")
43+
eventEmitter.unsubscribe("print", print_callback)
44+
eventEmitter.emit("print", "Don't print")

0 commit comments

Comments
 (0)