ReMe/v1/utils/registry.py
2025-07-03 18:21:15 +08:00

31 lines
864 B
Python

from typing import List
from loguru import logger
class Registry(object):
def __init__(self):
self._registry = {}
def register(self, name: str = None):
def decorator(cls):
class_name = name if name is not None else cls.__name__
if class_name in self._registry:
logger.warning(f"name={class_name} is already registered, will be overwritten.")
self._registry[class_name] = cls
return cls
return decorator
def __getitem__(self, name: str):
if name not in self._registry:
raise KeyError(f"name={name} is not registered!")
return self._registry[name]
def __contains__(self, name: str):
return name in self._registry
@property
def registered_names(self) -> List[str]:
return sorted(self._registry.keys())