| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- """
- Модуль предосталвыяет тип 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()
|