mirror of
https://github.com/dongdongunique/EvoSynth.git
synced 2026-05-31 20:31:35 +02:00
34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
from typing import Any, Callable, Dict, Type, List
|
|
|
|
class Registry:
|
|
def __init__(self, name: str):
|
|
self._name = name
|
|
self._registry: Dict[str, Any] = {}
|
|
|
|
def register(self, name: str) -> Callable:
|
|
def decorator(cls: Type) -> Type:
|
|
if name in self._registry:
|
|
print(f"Warning: '{name}' is being overwritten in the {self._name} registry.")
|
|
self._registry[name] = cls
|
|
return cls
|
|
return decorator
|
|
|
|
def get(self, name: str) -> Any:
|
|
if name not in self._registry:
|
|
available = list(self._registry.keys())
|
|
raise ValueError(f"'{name}' not found in {self._name} registry. Available: {available}")
|
|
return self._registry[name]
|
|
|
|
def list(self) -> List[str]:
|
|
return list(self._registry.keys())
|
|
|
|
# --- 全局注册表实例 ---
|
|
attack_registry = Registry("Attacks")
|
|
model_registry = Registry("Models")
|
|
dataset_registry = Registry("Datasets")
|
|
evaluator_registry = Registry("Evaluators")
|
|
|
|
# --- 策略专属注册表 ---
|
|
judge_registry = Registry("Judges")
|
|
advancer_registry = Registry("Advancers")
|
|
propagator_registry = Registry("Propagators") |