当前位置: 首页 > news >正文

《流畅的Python》读书笔记06(补充01): 数据类构建器 - 三类数据容器对比(简洁版)

Python 3.7 引入的dataclass装饰器、collections.namedtuple以及typing.NamedTuple是三种用于简化数据容器类创建的工具旨在减少__init__、__repr__和__eq__等样板代码的编写 。构建器核心特性可变性默认值支持推荐使用场景collections.namedtuple构建tuple的子类实例不可变支持字段名访问内存效率极高。❌ 不可变Python 3.7 支持需要极简、只读且内存敏感的数据容器例如坐标点、配置项。typing.NamedTuple同样构建tuple子类但强制要求类型注解支持class语法便于集成方法和文档。❌ 不可变✅ 支持需要类型提示供 IDE/类型检查器使用的不可变数据容器。dataclasses.dataclass类装饰器自动生成常用方法提供高度可定制性如可变性、字段控制、后初始化钩子。✅ 默认可变 (可设frozenTrue为不可变)✅ 支持 (含field(default_factory...)处理可变默认值)需要字段默认值、可变数据、复杂初始化逻辑__post_init__或高度定制的场景。关键对比与选择策略可变性namedtuple和NamedTuple生成不可变元组子类dataclass默认生成可变类但可通过frozenTrue参数变为不可变。类型注解NamedTuple和dataclass均支持类型注解有利于代码可读性和静态类型检查。默认值处理dataclass的field(default_factory...)能安全处理列表、字典等可变类型的默认值避免实例间共享引用的问题。扩展性NamedTuple和dataclass支持class语法可方便地添加自定义方法如__str__、业务逻辑方法。版本兼容性若代码需在 Python 3.7 以下版本运行应选择namedtuple或NamedTuple。代码示例核心用法# 使用 dataclass 创建可变数据类并处理可变默认值 from dataclasses import dataclass, field dataclass class ShoppingCart: items: list field(default_factorylist) # 每次实例化生成独立列表 owner: str Guest cart1 ShoppingCart() cart1.items.append(apple) print(cart1) # ShoppingCart(items[apple], ownerGuest) # 使用 typing.NamedTuple 创建带类型注解和自定义方法的不可变类 from typing import NamedTuple class Coordinate(NamedTuple): lat: float lon: float def format(self) - str: return f{self.lat}, {self.lon} point Coordinate(55.756, 37.617) print(point.format()) # 55.756, 37.617 # point.lat 60.0 # 此行会报错因为实例不可变潜在的设计考量文章指出若一个类仅包含数据字段而无任何关联行为方法可能是一种“数据类代码异味”暗示了面向对象设计中的职责分配问题。在这种情况下应考虑将操作这些数据的方法迁移到该数据类内部以遵循“高内聚”的设计原则 。参考来源《流畅的Python》读书笔记06: 第一部分 数据结构 - 数据类构建器
http://www.gsyq.cn/news/1334027.html

相关文章:

  • 2025-2026年北京睿信致成管理顾问有限公司电话查询:选择咨询机构前核实服务资质 - 品牌推荐
  • 终极指南:用CXPatcher在Mac上解锁CrossOver游戏性能的完整教程
  • 三大运营商齐推Token套餐,转型背后利弊几何?
  • 实时分析管道:构建实时数据处理和分析能力
  • 【ACM出版、往届已稳定EI检索】第二届大数据与智慧医学国际学术会议(BDIMed 2026)
  • TPS5450同步降压转换器设计:从宽压输入到5V/3.3V输出的工程实践
  • AI人才缺口500万:2026年最值得入局的10个职业方向
  • 给Yahboom Dofbot机械臂写个‘身份证’:手把手教你从零创建URDF模型(附完整代码)
  • 2026年内墙益胶泥生产厂家选购分析与主流品牌推荐 - 产业观察网
  • 建议收藏|2026年最值得信赖的专业AI论文网站
  • 如何快速解锁加密音乐?3种本地音频解密方案深度解析
  • LabVIEW与树莓派结合:图形化编程降低物联网开发门槛
  • 2025-2026年上海云邦律师事务所电话查询:委托前请核实资质与案件受理范围 - 品牌推荐
  • 2026年外墙益胶泥供应厂家哪家好:主流合规供应商选型深度分析 - 产业观察网
  • UE5/UE4开发别再被GPU崩溃劝退!手把手教你修改注册表TdrDelay,给显卡多争取60秒
  • 从Focal Loss到Equalization Loss:目标检测中处理数据不平衡的‘三板斧’实战指南
  • 告别命令行恐惧:在Ubuntu 23.04上图形化玩转Mininet网络模拟(附MiniEdit配置全流程)
  • 独立开发者如何借助Taotoken管理多个AI侧项目
  • Windows定时任务+Python脚本:实现微信PC端消息定时发送的两种稳定方案
  • 观察使用token plan套餐后月度api成本的可控性变化
  • OpenBMC定制化实战:用devtool修改WebUI登录界面,替换成自己的Logo
  • Pyppeteer爬虫防检测实战:绕过淘宝、知乎反爬的3个关键配置与1个核心脚本
  • 从‘一锤子买卖’到‘终身学习’:聊聊语义分割模型如何像人一样越学越聪明
  • 别再被Element Plus Table坑了!fixed列+横向滚动+斑马纹的样式冲突避坑指南
  • learn claude code s01
  • HC7252晨芯阳内置MOS开关降压型LED恒流驱动器
  • AGI落地第一步:在宝马工厂里‘打工’的Figure 01,离替代产线工人还有多远?
  • 别再复制官方文档了!用Python把文心一言API集成到你的本地应用(附完整代码)
  • 书匠策AI降重降AIGC实测|官网www.shujiangce.com |微信公众号搜一搜 书匠策AI
  • 科研学术篇---文献引用格式