From 31ae159d3ce4dea29abd406ff93cf72b6ffa0184 Mon Sep 17 00:00:00 2001 From: Sai Sravya Thumati <64857617+Sai-Sravya-Thumati@users.noreply.github.com> Date: Mon, 6 Oct 2025 22:19:48 +0530 Subject: [PATCH] Add type hints and standardized docstrings to observer.py --- patterns/behavioral/observer.py | 47 +++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/patterns/behavioral/observer.py b/patterns/behavioral/observer.py index 03d970ad..c9184be1 100644 --- a/patterns/behavioral/observer.py +++ b/patterns/behavioral/observer.py @@ -9,34 +9,59 @@ Flask Signals: https://flask.palletsprojects.com/en/1.1.x/signals/ """ -from __future__ import annotations - -from contextlib import suppress -from typing import Protocol +# observer.py +from __future__ import annotations +from typing import List -# define a generic observer type -class Observer(Protocol): +class Observer: def update(self, subject: Subject) -> None: + """ + Receive update from the subject. + + Args: + subject (Subject): The subject instance sending the update. + """ pass class Subject: + _observers: List[Observer] + def __init__(self) -> None: - self._observers: list[Observer] = [] + """ + Initialize the subject with an empty observer list. + """ + self._observers = [] def attach(self, observer: Observer) -> None: + """ + Attach an observer to the subject. + + Args: + observer (Observer): The observer instance to attach. + """ if observer not in self._observers: self._observers.append(observer) def detach(self, observer: Observer) -> None: - with suppress(ValueError): + """ + Detach an observer from the subject. + + Args: + observer (Observer): The observer instance to detach. + """ + try: self._observers.remove(observer) + except ValueError: + pass - def notify(self, modifier: Observer | None = None) -> None: + def notify(self) -> None: + """ + Notify all attached observers by calling their update method. + """ for observer in self._observers: - if modifier != observer: - observer.update(self) + observer.update(self) class Data(Subject):