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/7/22 3:32:06 阅读更多 →
记一次条形码解码问题排查与解决方案

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

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

2026/7/22 3:32:06 阅读更多 →
Spring AI智能体在智能菜谱系统中的应用实践

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

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

2026/7/22 3:32:06 阅读更多 →

最新新闻

信息学竞赛实战:PKUWC与WC双赛经验分享

信息学竞赛实战:PKUWC与WC双赛经验分享

1. 赛事背景与个人准备2019年初的冬天,我带着两个保温杯和半箱红牛踏上了前往北京的高铁。作为信息学竞赛的长期参与者,这次同时参加PKUWC(北京大学冬令营)和WC(全国青少年信息学奥林匹克冬令营)的经历&…

2026/7/22 4:29:30 阅读更多 →
大语言模型提示技术:从零样本到多轮对话实战指南

大语言模型提示技术:从零样本到多轮对话实战指南

1. 提示技术概述:从零样本到新对话的演进路径在自然语言处理领域,提示技术(Prompting Techniques)已成为连接预训练模型与下游任务的核心桥梁。过去三年,随着GPT-3、ChatGPT等大语言模型的崛起,提示工程从边…

2026/7/22 4:29:30 阅读更多 →
机械合金化技术:颠覆传统的金属冷加工新工艺

机械合金化技术:颠覆传统的金属冷加工新工艺

1. 项目概述:颠覆传统的金属冶炼新思路当我在材料实验室第一次看到这种新型金属加工技术时,整个人都愣住了——没有传统冶炼车间的高温熔炉,没有刺鼻的化学气体,取而代之的是一台看似简单的机械装置,通过精确控制的冲击…

2026/7/22 4:29:30 阅读更多 →
C++循环结构实战:从猜数字游戏掌握do...while与输入验证

C++循环结构实战:从猜数字游戏掌握do...while与输入验证

1. 项目概述:从“猜数字”窥探C循环结构的实战魅力 “猜数字”这个小游戏,估计是每个C初学者在接触循环结构时都会遇到的经典案例。它看似简单,一个随机数,几次猜测,对了就结束。但如果你只把它当作一个简单的语法练习…

2026/7/22 4:29:30 阅读更多 →
PHP与C/C++混合编程:性能优化与系统扩展实战指南

PHP与C/C++混合编程:性能优化与系统扩展实战指南

1. 项目概述:为什么PHP开发者需要了解C/C?在Web开发的世界里,PHP无疑是王者之一,它简单、快速,是构建动态网站和Web应用的利器。但当你深耕PHP一段时间,尤其是处理高并发、复杂计算密集型任务,或…

2026/7/22 4:29:30 阅读更多 →
嵌入式系统异常与中断:内忧外患的底层处理机制与实战设计

嵌入式系统异常与中断:内忧外患的底层处理机制与实战设计

1. 从“内忧外患”说起:理解系统运行的两种扰动做嵌入式或者底层系统开发的朋友,对“异常”和“中断”这两个词一定不陌生。它们就像是系统运行过程中遇到的两种“意外事件”,一个来自内部,一个来自外部,共同构成了我们…

2026/7/22 4:28:29 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻