简化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 吧!

目录
相关文章
|
11小时前
|
安全 数据库连接 数据库
掌握Python上下文管理器:优雅资源管理的艺术
掌握Python上下文管理器:优雅资源管理的艺术
69 46
|
11小时前
|
Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
34 10
|
安全 网络安全 定位技术
华为基础数通知识
了解基本的数通知识,成为更好的自己
|
存储 人工智能 移动开发
7zip 命令使用手册
本文中介绍的命令使用方式在所有安装了7zip的系统平台上使用方式一致。 在 Windows 系统上,你可以直接去观官网下载 7zip 安装包根据提示进行安装,但是若要使用7z命令,一定需要手动将 7zip 的安装目录添加到系统的Path环境变量。 在Linux上,请确包你使用的是 原版7zip 而非 p7zip,在Linux系统上的安装可以参考我的博文《如何在 Linux 系统中安装和使用 7zip》(实际上,本文节选自该博文)
1770 0
|
2月前
|
SQL 数据采集 存储
六、Hive 分桶
在 Hive 的世界里,除了常见的分区,分桶也是一项非常实用的数据优化方式。它能帮助我们将数据按某个字段均匀划分到多个“桶”中,不仅能提升大表连接的效率,还特别适合做数据抽样和精细管理。本文将带你一步步了解分桶表的创建方法、数据加载过程和常见应用场景,配有丰富示例和练习题,帮助你在实战中轻松掌握这项技能。
210 7
|
17小时前
|
人工智能 JavaScript 安全
Openclaw的安装部署及免费API集成教程
OpenClaw 是一款开源 AI 代理框架,支持 Discord 等平台。要求 Node.js ≥22、4GB+ 内存,推荐 macOS/Linux 或 WSL2。提供一键脚本安装、向导式配置(含 Bot 权限、频道 ID、API 接入如 Canopy Wave)、后台服务与 TUI 交互,支持更新、日志与健康检查。(239 字)
100 1
|
9月前
|
编解码 安全 BI
二维码技术如何助力医疗行业提质增效?从设备管理到健康宣教到的全场景应用
医疗设备管理、院感防控、资产盘点和健康宣教是医疗机构日常运营中的重要环节,但传统手工方式常导致效率低下、数据不透明等问题。草料二维码提供了一种轻量化解决方案:通过为每台设备、物品或宣传资料绑定专属二维码,实现信息查询、维护记录、消毒登记及患者教育等功能的数字化管理。该方案操作简单、成本低且上手快,适合基层医疗机构使用,有效提升管理效率与服务质量,助力医疗信息化建设。
249 35
二维码技术如何助力医疗行业提质增效?从设备管理到健康宣教到的全场景应用
|
10月前
|
人工智能 自然语言处理 算法
经典大模型提示词工程技术路线概述
本文概述几种经典提示词工程方法,总结关键信息,分析其优势和局限,并分享笔者的一点思考。
873 105
经典大模型提示词工程技术路线概述
|
4月前
|
人工智能 弹性计算 安全
阿里云无影云电脑具体价格:个人版、企业版和免费云电脑配置介绍
阿里云无影云电脑2025年最新价格:企业版4核8G低至199元/年,支持办公与设计;个人版分黄金到黑金多款,月费14元起,适配云游戏与AI办公。含GPU高配机型,另享免费试用。
|
6月前
|
前端开发 JavaScript
Font Awesome 一个基于CSS和LESS的免费图标库工具包
Font Awesome 是一款免费的图标字体库,基于 CSS 和 LESS,适用于个人和商业项目。它提供5000多个可缩放矢量图标,支持通过 CSS 轻松调整大小、颜色和阴影,适配高分辨率屏幕,极大提升网页开发效率。使用时只需引入 CSS 文件,即可通过类名快速调用图标,是现代前端开发的常用工具。
783 0
Font Awesome 一个基于CSS和LESS的免费图标库工具包