from copy import deepcopy from heurams.services.logger import get_logger from heurams.utils.evalizor import Evalizer logger = get_logger(__name__) class Nucleon: """原子核: 带有运行时隔离的模板化只读材料元数据容器""" def __init__(self, ident, payload, common): self.ident = ident env = {"payload": payload} self.evalizer = Evalizer(environment=env) self.data = self.evalizer(deepcopy((payload | common))) def __getitem__(self, key): if key == "ident": return self.ident return self.data[key] def __setitem__(self, key, value): raise AttributeError("应为只读") def __delitem__(self, key): raise AttributeError("应为只读") def __iter__(self): return iter(self.data) def __contains__(self, key): return key in (self.data) def get(self, key, default=None): if key in self: return self[key] return default def __len__(self): return len(self.data) def __repr__(self): return repr(self.data) @staticmethod def create_on_nucleonic_data(nucleonic_data: tuple): _data = nucleonic_data payload = _data[1][0] common = _data[1][1] ident = _data[0] # TODO:实现eval return Nucleon(ident, payload, common)