Python 数据建模:dataclass、TypedDict、Literal 与 LangGraph State 总结
文章目录一、dataclass 与 TypedDict 通用对比二、Literal 类型三、LangGraph 中的 State 用法调用时必须提供初始值四、综合示例dataclass 与 TypedDict 的通用区别、Literal 类型以及它们在 LangGraph 中作为 State 时的具体用法与差异。一、dataclass 与 TypedDict 通用对比核心区别 特性 dataclass TypedDict 引入版本 Python 3.7 Python 3.8运行时实体 真正的类可实例化 普通 dict类型构造器 数据访问 属性访问 (obj.x) 键访问 (d[“x”])主要用途 封装数据 行为 为字典提供精确类型提示 默认值 支持… 或 field() 不直接支持需用NotRequired/totalFalse 继承 完整类继承字段自动合并 支持 TypedDict 继承类型检查 检查实例属性类型 检查字典键是否存在及值类型代码示例fromdataclassesimportdataclassfromtypingimportTypedDictdataclassclassPointDC:x:inty:intclassPointTD(TypedDict):x:inty:intdcPointDC(1,2)td:PointTD{x:1,y:2}print(dc.x)# 属性访问 ✅print(td[x])# 键访问 ✅如何选择用 dataclass需要对象语义、方法、post_init校验、默认值、比较操作。用 TypedDict数据本质是字典JSON / API 响应仅需静态类型提示不改运行时结构。二、Literal 类型概念Literal 用于精确限定取值为特定常量如 Literal[“open”, “closed”]仅在静态类型检查mypy、pyright中生效运行时无强制约束。与 Enum 对比方案 本质 适用场景Literal 类型注解 少量固定常量、字符串/数字标志Enum 枚举类 需遍历、运行时强类型、自文档化在数据类中的结合使用fromtypingimportLiteral,TypedDictfromdataclassesimportdataclassdataclassclassUser:role:Literal[admin,user,guest]classConfig(TypedDict):env:Literal[dev,prod]debug:bool三、LangGraph 中的 State 用法LangGraph 允许使用 dataclass 或 TypedDict 定义 State。两者在节点node返回值上的行为完全一致。3.1 Node 返回值通用规则Node 函数接收 State 作为参数类型为 dataclass 实例或 TypedDict 字典。必须返回一个 dict且该 dict 表示增量更新不必包含全部字段。框架根据 reducer 合并回原 State未返回的字段保持原值。若返回不存在的键或空 dict无有效键会触发 InvalidUpdateError。def node(state: State) - dict:return {“count”: state.count 1} # 只更新 count其他字段保留3.2 dataclass 作为 State定义与默认值fromdataclassesimportdataclass,fieldfromlanggraph.graphimportStateGraphdataclassclassState:step:int0logs:list[str]field(default_factorylist)Reducer 标注fromtypingimportAnnotatedfromoperatorimportadddataclassclassState:logs:Annotated[list[str],add]field(default_factorylist)节点读写读state.step写返回 {“step”: new_value}优势与场景默认值书写自然尤其适合 list/dict 字段。属性访问带 IDE 补全重构安全。支持post_init做状态校验。适合字段较多、有合并逻辑的内部业务图。3.3 TypedDict 作为 State定义与默认值fromtypingimportTypedDict,AnnotatedfromoperatorimportaddclassState(TypedDict):step:intlogs:Annotated[list[str],add]调用时必须提供初始值graph.invoke({“step”: 0, “logs”: []})Python 3.11 可用 NotRequired 实现可选但仍非真正的默认值。节点读写读state[“step”]写返回 {“step”: new_value}优势与场景原生字典JSON 序列化友好。与 API / 外部 JSON 响应结构自然对齐。Checkpoint 存为人类可读的纯 dict。3.4 对比总结表LangGraph 场景维度 dataclass State TypedDict State节点入参类型 dataclass 实例 dict 子类读取方式 state.field state[“field”]默认值 天然支持 需手动传初始值或 NotRequiredreducer 写法 Annotated field() Annotated 直接标在类型上序列化 pickle默认 checkpoint 原生 dictJSON 友好运行时校验post_init支持 无3.5 实践建议优先用 dataclass字段多、需默认值、有 list/dict reducer、偏好 . 访问。优先用 TypedDict状态即 JSON、需可读 checkpoint、字段少且愿每次传全初始值。两者 node 返回值均为增量 dict都不必返回全部字段。四、综合示例fromdataclassesimportdataclass,fieldfromtypingimportAnnotated,Literalfromoperatorimportaddfromlanggraph.graphimportStateGraphdataclassclassAppState:count:int0status:Literal[idle,run]idlehistory:Annotated[list[int],add]field(default_factorylist)defincrement(state:AppState)-dict:return{count:state.count1,history:[state.count1]}graphStateGraph(AppState)graph.add_node(inc,increment)graph.set_entry_point(inc)appgraph.compile()resultapp.invoke({})print(result)

相关新闻

Unity穿山甲广告集成实战:5分钟搞定Banner、激励视频与插屏广告

Unity穿山甲广告集成实战:5分钟搞定Banner、激励视频与插屏广告

1. 项目概述:为什么Unity广告集成是移动开发者的必修课?如果你正在用Unity开发一款面向移动端的应用,无论是游戏还是工具,那么“变现”这个词迟早会摆在你面前。而广告,尤其是国内主流的穿山甲广告平台,几乎…

2026/10/14 8:54:36 阅读更多 →
记一次条形码解码问题排查与解决方案

记一次条形码解码问题排查与解决方案

一、问题描述 IEasyTool - 在线小工具新增"条形码解码"功能:用户上传条形码图片,系统自动识别并提取条码内容。 现象:用项目现有的"条形码生成器"生成的 CODE128 条码图片,上传后始终提示「未识别到条形码」…

2026/10/16 1:07:44 阅读更多 →
Spring AI智能体在智能菜谱系统中的应用实践

Spring AI智能体在智能菜谱系统中的应用实践

1. 项目概述:当Spring AI遇上智能菜谱系统去年为一个健康管理平台做技术咨询时,他们提出个有趣的需求:用户上传食材照片后,系统不仅要推荐匹配的菜谱,还得实时计算营养成分。当时用传统方案拼凑了三个独立系统&#xf…

2026/9/27 23:54:20 阅读更多 →

最新新闻

AI辅助专著写作全流程:从选题到定稿的实操指南

AI辅助专著写作全流程:从选题到定稿的实操指南

写一本专著,对绝大多数人来说,第一反应都是“这事太大了”。从选题、搭框架、找文献、写初稿,到来回改格式、统一术语、核对引用,随便哪一环拎出来都够磨掉几个月。更要命的是,很多内容领域里的资深从业者,…

2026/10/17 16:58:03 阅读更多 →
STM32F107实现IEEE1588v2 PTP纳秒级时间同步解析

STM32F107实现IEEE1588v2 PTP纳秒级时间同步解析

简介:面向STM32嵌入式开发者,这份资源提供了在STM32F107上基于LwIP协议栈实现IEEE 1588v2精确时间协议(PTP)的完整方案,包含设计文档与Keil工程代码,适用于工业自动化、电力系统等需要高精度时钟同步的场景…

2026/10/17 16:58:02 阅读更多 →
Ubuntu安装GCC踩坑记:搞懂工具链才能一劳永逸

Ubuntu安装GCC踩坑记:搞懂工具链才能一劳永逸

在 Ubuntu 里装 gcc,乍一听是个三分钟就能搞定的基础操作,网上教程也是一抓一大把。但上周我在一台新拿到的 Ubuntu 工作站上装 gcc,前后折腾了小半天,问题一个接一个:先是最基础的源更新出问题,再是包名找…

2026/10/17 16:58:02 阅读更多 →
威胁情报AI落地实战:从情报处理到检测响应自动化

威胁情报AI落地实战:从情报处理到检测响应自动化

1. 先搞清楚:威胁情报AI到底要解决什么我前前后后做了六年多安全运营,带过SOC,也搭过威胁情报平台,一个特别深的感受是:蓝队真正缺的不是告警,不是规则,更不是又一个炫酷的仪表盘,而…

2026/10/17 16:58:02 阅读更多 →
UE4内存管理实战:深入理解垃圾回收与UObject引用追踪

UE4内存管理实战:深入理解垃圾回收与UObject引用追踪

1. 开篇:UE4内存管理,绕不开的必修课但凡在UE4里做过中大型项目的开发者,都会对内存管理这块有切肤之痛。UE4的垃圾回收机制不是我们平时理解的"GC自动帮你清理一切",它有一套基于UObject和反射系统的标记-清除&#xf…

2026/10/17 16:58:02 阅读更多 →
GNSS/INS松组合导航Matlab实现:卡尔曼滤波与误差状态详解

GNSS/INS松组合导航Matlab实现:卡尔曼滤波与误差状态详解

简介:面向航空航天、自动驾驶与航海等导航应用场景,这份GNSS/INS松组合导航Matlab程序适合需要研究卫星/惯性组合导航算法的工程师与在校生。程序围绕GNSS与INS数据融合展开:先由GNSS轨迹生成模拟惯导输出,再经卡尔曼滤波、四元数…

2026/10/17 16:56:54 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →