简化Python类:使用数据类(dataclasses)

简介: 简化Python类:使用数据类(dataclasses)

简化Python类:使用数据类(dataclasses)

在编写 Python 类时,你是否经常编写繁琐的 __init____repr____eq__ 方法?从 Python 3.7 开始,标准库提供了 dataclasses 装饰器,让类的定义变得前所未有的简洁。

什么是数据类?

数据类是一个装饰器,它会根据类属性自动生成 __init____repr____eq__ 等方法。我们来看一个例子:

from dataclasses import dataclass

@dataclass
class Book:
    title: str
    author: str
    price: float

短短几行,我们就拥有了完整的初始化、可读字符串表示和相等比较功能。无需再手写 self.title = title 等重复代码。

字段默认值与类型提示

数据类充分利用了 Python 的类型注解,并允许直接给字段赋默认值:

@dataclass
class Book:
    title: str
    author: str
    price: float = 0.0
    in_stock: bool = True

注意:有默认值的字段必须放在无默认值字段之后,这与函数参数规则一致。

不可变实例:frozen=True

如果你希望实例创建后不可修改,只需设置 frozen=True

@dataclass(frozen=True)
class Point:
    x: int
    y: int

尝试修改 p.x = 10 会抛出 FrozenInstanceError。这提供了类似命名元组(namedtuple)的不可变性,但更灵活。

高级定制

数据类还支持 order=True 自动生成比较方法,以及 field 函数进行更细粒度的控制(如排除字段由 __repr__ 显示)。例如:

from dataclasses import field

@dataclass
class User:
    id: int
    name: str
    password: str = field(repr=False)  # 不显示密码

何时使用数据类?

当你需要存储数据的容器,并且主要操作是访问属性而非复杂逻辑时,数据类是最佳选择。它比字典更规范,比普通类更简洁,比命名元组更强大。

从简单的配置对象到复杂的业务实体,数据类正在成为 Python 项目中不可或缺的工具。如果你还没有尝试过,现在就在你的代码中引入 @dataclass 吧!

目录
相关文章
|
1天前
|
Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
52 19
|
1天前
|
安全 数据库连接 数据库
掌握Python上下文管理器:优雅资源管理的艺术
掌握Python上下文管理器:优雅资源管理的艺术
191 155
|
30天前
|
数据采集 人工智能 IDE
告别碎片化日志:一套方案采集所有主流 AI 编程工具
本文介绍了一套基于MCP架构的轻量化、多AI工具代码采集方案,支持CLI、IDE等多类工具,实现用户无感、可扩展的数据采集,已对接Aone日志平台,助力AI代码采纳率分析与研发效能提升。
421 46
告别碎片化日志:一套方案采集所有主流 AI 编程工具
|
3天前
|
人工智能 运维 自然语言处理
说话就能让AI写出顶级代码?Vercel官方经验包来了
## 先说前提:这个干嘛的 用大白话说:Vercel是全球最大的网页托管平台。 你知道GitHub吗?全球最大的代码托管平台。 Vercel就是网页版的GitHub,全世界数百万网站都用它托管。 服务过哪些大牌? 有字节跳动、Adobe、IBM这些巨头。 现在Vercel把内部多年积累的开发经验,打包成了一个 经验包。 你不用学技术,不用背规则,甚至不用看文档。 只要正常跟AI说话,AI就会
216 131
|
1月前
|
SQL 人工智能 分布式计算
从工单、文档到结构化知识库:一套可复用的 Agent 知识采集方案
我们构建了一套“自动提取 → 智能泛化 → 增量更新 → 向量化同步”的全链路自动化 pipeline,将 Agent 知识库建设中的收集、提质与维护难题转化为简单易用的 Python 工具,让知识高效、持续、低门槛地赋能智能体。
361 36
|
2天前
|
存储 人工智能 网络安全
OpenClaw(Clawdbot)阿里云零基础部署,打造QQ社群智能助手,自动化运营全攻略
社群运营常常陷入“重复劳动多、核心价值少”的困境:新人入群反复提问相同问题、高质量讨论被闲聊覆盖、活动报名统计耗时耗力、社群活跃度逐渐下滑。而OpenClaw(曾用名Clawdbot、Moltbot)作为功能强大的开源AI框架,搭配NapCat QQ协议层,能轻松打造一站式QQ社群智能助手,实现智能问答、精华沉淀、活动管理、互动活跃全自动化,让社群运营从“被动应对”变为“主动赋能”。
71 18
|
1天前
|
安全 物联网 C++
技术抉择:微调还是 RAG?——以春节祝福生成为例
本文以春节祝福生成为例,剖析微调与RAG的本质差异:RAG解决“信息缺失”,微调重塑“表达偏好”。当任务重风格、重分寸、重一致性(如拜年话术),模型缺的不是知识,而是默认的得体表达——此时微调比RAG更直接、可控、高效。
254 152
|
1天前
|
缓存 人工智能 自然语言处理
企业级编程助手避坑指南:数月躬身摸索,凝炼实操进阶巧思
在软件开发向团队化、工程化进阶的当下,企业级编程助手已不再是单纯的AI编码辅助载体,而是成为覆盖需求→设计→开发→Review全流程的研发基础设施。它依托多模型适配引擎与规范驱动开发体系,融合静态代码分析、环境隔离等核心技术,能实现自然语言任务驱动、自动化代码评审、多端协同开发等功能,帮助研发团队减少重复劳动、提升工程质量。本文结合几个月来的实际使用经历,分享编程助手的实操技巧、实际应用案例及使用心得,旨在为同行提供可落地的实践经验,规避使用误区。
|
20天前
|
Go 调度 开发者
实战Go并发模型:轻量级协程的高效应用
实战Go并发模型:轻量级协程的高效应用
223 145
|
1月前
|
存储 数据采集 弹性计算
面向多租户云的 IO 智能诊断:从异常发现到分钟级定位
当 iowait 暴涨、IO 延迟飙升时,你是否还在手忙脚乱翻日志?阿里云 IO 一键诊断基于动态阈值模型与智能采集机制,实现异常秒级感知、现场自动抓取、根因结构化输出,让每一次 IO 波动都有据可查,真正实现从“被动响应”到“主动洞察”的跃迁。
305 60