Исходный код EJIO.utils.interface.static_class
## /utils/interface/static_class.py
from typing import NoReturn
from .disposable import DisposableMeta
__all__ = [
'StaticClass',
'StaticClassMeta',
]
[документация]
class StaticClassMeta(DisposableMeta):
"""
Метакласс, запрещающий создание экземпляров.
"""
__slots__ = ()
def __call__(cls, *args: tuple[object, ...], **kwargs: dict[str, object]) -> NoReturn:
"""
Запрещает вызов класса для создания экземпляров.
:param args: Аргументы вызова.
:param kwargs: Ключевые аргументы вызова.
:raises: TypeError при попытке вызова класса.
"""
raise TypeError(
f"Class '{cls.__name__}' is static. "
f"Instances creation is forbidden."
)
[документация]
class StaticClass(metaclass=StaticClassMeta):
"""
Интерфейс-миксин для создания строго статических классов.
Запрещает создание любых экземпляров данного класса или его наследников.
"""
__slots__ = ()
def __init__(self) -> None:
"""
Запрещает создание экземпляров класса.
:raises: TypeError при попытке вызова конструктора
"""
raise TypeError(
f"Class '{self.__class__.__name__}' is static. "
f"Instances creation is forbidden."
)