""" Модуль предосталвыяет тип Option (как в rust) """ from collections.abc import Callable from typing import Generic, TypeVar # Параметры типов T = TypeVar("T") class Option(Generic[T]): """ Тип контролирующий возвращаемое значение (возможно None). """ def __init__(self, val: T | None = None) -> None: self._value: T | None = val """Хранимое значение.""" def some(self) -> T: """Возвращает полезное значение, если оно есть""" if self._value is None: raise ValueError("Option[T].some(): val is None") return self._value def is_some(self) -> bool: """Проверка значения на значение""" return self._value is not None def is_none(self) -> bool: """Проверка значения на пустышку""" return self._value is None def unwrap_or(self, val_def: T) -> T: """Возвращает хранимое значение или альтернативу""" if self._value is not None: return self._value return val_def def unwrap_or_fn(self, fn: Callable[..., T]) -> T: """Возвращает значение или результат функции""" if self._value is not None: return self._value return fn()