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/26 18:02:13 阅读更多 →
记一次条形码解码问题排查与解决方案

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

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

2026/7/26 15:16:43 阅读更多 →
Spring AI智能体在智能菜谱系统中的应用实践

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

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

2026/7/25 23:25:29 阅读更多 →

最新新闻

RC4算法C语言实现与安全缺陷深度剖析

RC4算法C语言实现与安全缺陷深度剖析

1. 项目概述:为什么今天还要聊RC4?如果你是一位C/C开发者,或者对密码学、网络安全感兴趣,那么“RC4”这个名字你一定不陌生。它曾经是SSL/TLS、WEP/WPA等众多协议中流密码的绝对主力,以其实现简单、速度极快而闻名。然…

2026/7/26 23:26:23 阅读更多 →
C语言文件操作全指南:文件读写、随机访问与缓冲区机制

C语言文件操作全指南:文件读写、随机访问与缓冲区机制

#c语言 「 每日一句 Daily Quote 」 “伟大的成就,唯一的方法就是热爱你所做的事。” — 史蒂夫乔布斯 文章目录前言一、为什么使用文件?二、什么是文件?2.1. 程序文件2.2. 数据文件2.3. 文件名三、二进制文件和文本文件四、文件的打开和关…

2026/7/26 23:26:23 阅读更多 →
推荐系统多任务建模:架构设计与工程实践

推荐系统多任务建模:架构设计与工程实践

1. 推荐系统多任务建模的核心动机在真实的互联网产品环境中,推荐系统往往需要同时优化多个业务目标。以电商平台为例,我们既希望提升点击率(CTR),又希望提高转化率(CVR),同时还要兼顾…

2026/7/26 23:25:21 阅读更多 →
【项目编号:project90470】图书馆管理不只是“借书还书”:这套 Spring Boot 系统把馆藏、读者与数据统计全串起来了

【项目编号:project90470】图书馆管理不只是“借书还书”:这套 Spring Boot 系统把馆藏、读者与数据统计全串起来了

图书馆管理不只是“借书还书”:这套 Spring Boot 系统把馆藏、读者与数据统计全串起来了Spring Boot 图书馆管理系统 前后台完整展示图书馆管理系统看似经典,但真正做出完整度以后,依然能够清楚体现前端交互、后台管理、数据库设计和数据统计…

2026/7/26 23:25:21 阅读更多 →
武汉李记沙发翻新工厂店:18年专注一件事,让每一张沙发都值得被善待

武汉李记沙发翻新工厂店:18年专注一件事,让每一张沙发都值得被善待

在城市快节奏的生活里,许多人习惯了"坏了就换",却忘了有些东西,值得被重新拾起。 一张陪伴多年的沙发,承载的是一家人的欢笑、午后的小憩、深夜的追剧时光。它不该因为皮面开裂、海绵塌陷就被轻易淘汰。 武汉李记沙发翻…

2026/7/26 23:25:21 阅读更多 →
# 鸿蒙ArkTS实战:折扣计算器 — 快速百分比选择与省钱明细展示

# 鸿蒙ArkTS实战:折扣计算器 — 快速百分比选择与省钱明细展示

一、应用概述 折扣计算器(Discount Calculator)是购物场景中使用频率极高的工具。当用户面对「全场 7 折」「满 200 减 50」「第二件半价」等促销信息时,最迫切的需求是快速知道折后价、节省金额和折扣力度。本应用基于 ArkTS 构建&#xff…

2026/7/26 23:25:21 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

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

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

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

月新闻