Skip to content

Commit 31ae159

Browse files
Add type hints and standardized docstrings to observer.py
1 parent ef74d59 commit 31ae159

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed

patterns/behavioral/observer.py

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,59 @@
99
Flask Signals: https://flask.palletsprojects.com/en/1.1.x/signals/
1010
"""
1111

12-
from __future__ import annotations
13-
14-
from contextlib import suppress
15-
from typing import Protocol
12+
# observer.py
1613

14+
from __future__ import annotations
15+
from typing import List
1716

18-
# define a generic observer type
19-
class Observer(Protocol):
17+
class Observer:
2018
def update(self, subject: Subject) -> None:
19+
"""
20+
Receive update from the subject.
21+
22+
Args:
23+
subject (Subject): The subject instance sending the update.
24+
"""
2125
pass
2226

2327

2428
class Subject:
29+
_observers: List[Observer]
30+
2531
def __init__(self) -> None:
26-
self._observers: list[Observer] = []
32+
"""
33+
Initialize the subject with an empty observer list.
34+
"""
35+
self._observers = []
2736

2837
def attach(self, observer: Observer) -> None:
38+
"""
39+
Attach an observer to the subject.
40+
41+
Args:
42+
observer (Observer): The observer instance to attach.
43+
"""
2944
if observer not in self._observers:
3045
self._observers.append(observer)
3146

3247
def detach(self, observer: Observer) -> None:
33-
with suppress(ValueError):
48+
"""
49+
Detach an observer from the subject.
50+
51+
Args:
52+
observer (Observer): The observer instance to detach.
53+
"""
54+
try:
3455
self._observers.remove(observer)
56+
except ValueError:
57+
pass
3558

36-
def notify(self, modifier: Observer | None = None) -> None:
59+
def notify(self) -> None:
60+
"""
61+
Notify all attached observers by calling their update method.
62+
"""
3763
for observer in self._observers:
38-
if modifier != observer:
39-
observer.update(self)
64+
observer.update(self)
4065

4166

4267
class Data(Subject):

0 commit comments

Comments
 (0)