""" Module implementing message related functions and classes. """ from typing import Type, TypeVar QuestionInst = TypeVar('QuestionInst', bound='Question') class MessageError(Exception): pass class Question(str): """ A single question with a defined prefix. """ prefix = '=== QUESTION ===' def __new__(cls: Type[QuestionInst], string: str) -> QuestionInst: """ Make sure the question string does not contain the prefix. """ if cls.prefix in string: raise MessageError(f"Question '{string}' contains the prefix '{cls.prefix}'") instance = super().__new__(cls, string) return instance