File size: 611 Bytes
52007f8 | 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 | #!/usr/bin/python
# -*- coding:utf-8 -*-
from typing import Dict
from copy import deepcopy
_NAMESPACE = {}
def register(name):
def decorator(cls):
assert name not in _NAMESPACE, f'Class {name} already registered'
_NAMESPACE[name] = cls
return cls
return decorator
def get(name):
if name not in _NAMESPACE:
raise ValueError(f'Class {name} not registered')
return _NAMESPACE[name]
def construct(config: Dict, **kwargs):
config = deepcopy(config)
cls_name = config.pop('class')
cls = get(cls_name)
config.update(kwargs)
return cls(**config) |