1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
from __future__ import annotations
from abc import ABC, abstractmethod
from types import TracebackType
from typing import Optional, Type
class DisposableBase(ABC):
"""Disposable abstract base class."""
__slots__ = ()
@abstractmethod
def dispose(self) -> None:
"""Dispose the object: stop whatever we're doing and release all of the
resources we might be using.
"""
raise NotImplementedError
def __enter__(self) -> DisposableBase:
"""Context management protocol."""
return self
def __exit__(
self,
exctype: Optional[Type[BaseException]],
excinst: Optional[BaseException],
exctb: Optional[TracebackType],
) -> None:
"""Context management protocol."""
self.dispose()
__all__ = ["DisposableBase"]
|