importinspectclassRegistry(object):def__init__(self,name):self._name=nameself._module_dict=dict()def__repr__(self):format_str=self.__class__.__name__+'(name={}, items={})'.format(self._name,list(self._module_dict.keys()))returnformat_str@propertydefname(self):returnself._name@propertydefmodule_dict(self):returnself._module_dictdefget(self,key):returnself._module_dict.get(key,None)def_register_module(self,module_class):ifnotinspect.isclass(module_class):raiseTypeError('module must be a class, but receive {}.'.format(type(module_class)))module_name=module_class.__name__ifmodule_nameinself._module_dict:raiseKeyError('{} is already registered in {}.'.format(module_name,self.name))self._module_dict[module_name]=module_classdefregister_module(self,cls):self._register_module(cls)returncls