import abc from typing import Self class SuspicionABC(abc.ABC): def __init__(self, *args, **kwargs): self.ctx = kwargs["ctx"] self._next_suspicion_clss = [] self._solution: str | list[str] = [] self._info = {} @abc.abstractmethod def verify(self) -> bool: return False @property def solutions(self) -> list[str]: if isinstance(self._solution, list): return self._solution return [self._solution] @property def next_suspicion_clss(self) -> list[type(Self)]: return self._next_suspicion_clss @property def info(self) -> dict: return self._info class Solution(object): def __init__(self, suspicion: str, solutions: list[str]): self.suspicion = suspicion self.solutions = solutions