#!/usr/bin/env python3 # -*- coding: utf-8 -*- from typing import Self, Callable, Any class EventsManager: def __init__(self:Self) -> None: self.__events:list[Callable[[Any|None], Any|None]] = [] def execute(self:Self, *arguments:tuple[Any|None, ...]) -> tuple[Any|None]: results:tuple[Any|None] = () for event in self.__events: if event is not None: results += (event(*arguments),) return results def add(self:Self, event:Callable[[Any|None], Any|None] ) -> int|None: i:int|None = None if callable(event): l:int = len(self.__events) i = 0 while i < l and self.__events[i] is not None: i += 1 if i < l: self.__events[i] = event else: self.__events.append(event) return i def remove(self:Self, i:int) -> bool: if 0 <= i < len(self.__events) and self.__events[i] is not None: self.__events[i] = None return True return False