23 lines
559 B
Python
23 lines
559 B
Python
from typing import Callable, Generic, TypeVar
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
class SingletonProvider(Generic[T]):
|
|
def __init__(self, factory: Callable[[], T]):
|
|
self._factory = factory
|
|
self._instance: T | None = None
|
|
|
|
def __call__(self) -> T:
|
|
if self._instance is None:
|
|
self._instance = self._factory()
|
|
return self._instance
|
|
|
|
def reset(self) -> None:
|
|
"""重置单例(测试 / 热重载用)"""
|
|
self._instance = None
|
|
|
|
def warmup(self) -> T:
|
|
"""提前初始化"""
|
|
return self()
|