57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
from heurams.services.logger import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
class Nucleon:
|
|
"""原子核: 材料元数据"""
|
|
|
|
def __init__(self, ident: str, payload: dict, metadata: dict = {}):
|
|
"""初始化原子核 (记忆内容)
|
|
|
|
Args:
|
|
ident: 唯一标识符
|
|
payload: 记忆内容信息
|
|
metadata: 可选元数据信息
|
|
"""
|
|
logger.debug(
|
|
"创建 Nucleon 实例, ident: '%s', payload keys: %s, metadata keys: %s",
|
|
ident,
|
|
list(payload.keys()) if payload else [],
|
|
list(metadata.keys()) if metadata else [],
|
|
)
|
|
self.metadata = metadata
|
|
self.payload = payload
|
|
self.ident = ident
|
|
logger.debug("Nucleon 初始化完成")
|
|
|
|
def __getitem__(self, key):
|
|
logger.debug("Nucleon.__getitem__: key='%s'", key)
|
|
if key == "ident":
|
|
logger.debug("返回 ident: '%s'", self.ident)
|
|
return self.ident
|
|
if key in self.payload:
|
|
value = self.payload[key]
|
|
logger.debug(
|
|
"返回 payload['%s'], value type: %s", key, type(value).__name__
|
|
)
|
|
return value
|
|
else:
|
|
logger.error("键 '%s' 未在 payload 中找到", key)
|
|
raise KeyError(f"Key '{key}' not found in payload.")
|
|
|
|
def __iter__(self):
|
|
yield from self.payload.keys()
|
|
|
|
def __len__(self):
|
|
return len(self.payload)
|
|
|
|
def __hash__(self):
|
|
return hash(self.ident)
|
|
|
|
@staticmethod
|
|
def placeholder():
|
|
"""生成一个占位原子核"""
|
|
logger.debug("创建 Nucleon 占位符")
|
|
return Nucleon("核子对象样例内容", {})
|