软件测试|教你使用dataclass

news2024/12/28 16:57:33

前言

当我们需要在Python中定义一种简单的数据容器类时,dataclass是一个非常有用的工具。它允许我们轻松地创建具有一些自动化特性的类,例如自动生成__init__()__repr__()__eq__()等方法。本文将详细介绍dataclass的使用,并提供示例来说明如何使用它。

什么是dataclass?

dataclass是Python标准库中的一个装饰器,它可以用来装饰类,使其变成一个用于存储数据的类,而不需要编写繁琐的构造函数、__repr__()方法以及比较方法。

注:Python3.7之后才可以直接使用dataclass,之前的版本需要先安装dataclasses模块,安装命令如下:

pip install dataclasses==0.8

但如果我们已经安装了pydantic,那我们就不需要再安装dataclasses了。

如何使用dataclass?

要使用dataclass,首先需要导入它:

from dataclasses import dataclass

然后,我们用@dataclass装饰器来标记一个类,以使其成为一个数据类。数据类的属性通常被定义为类的变量,并且它们的类型可以注释在变量上。

让我们通过一个示例来说明如何使用dataclass

示例:定义一个Person类

假设我们要定义一个表示人员信息的类,包括姓名和年龄。使用dataclass,我们可以如下定义这个类:

from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int

在这个示例中,我们定义了一个名为Person的数据类,它有两个属性:nameage,分别表示姓名和年龄。请注意,我们没有编写构造函数、__repr__()或__eq__()方法。

现在,让我们看看如何使用这个Person类创建对象:

# 创建一个Person对象
person1 = Person("Alice", 30)

# 创建另一个Person对象
person2 = Person("Bob", 25)

# 打印对象
print(person1)  # 输出: Person(name='Alice', age=30)
print(person2)  # 输出: Person(name='Bob', age=25)

# 检查两个对象是否相等
print(person1 == person2)  # 输出: False

如上所示,我们可以非常轻松地创建Person对象,打印它们会生成有意义的输出,并且我们可以使用==运算符来比较它们。这是由dataclass自动提供的功能。

dataclass的默认行为

dataclass提供了一些默认行为,这些行为可以根据需要进行自定义。以下是一些默认行为:

  1. __init__()方法:dataclass自动生成一个初始化方法,它接受并初始化所有类属性。
  2. __repr__()方法:dataclass自动生成一个可读性良好的字符串表示,用于打印对象。
  3. __eq__()方法:dataclass自动生成一个相等性方法,用于比较两个对象的属性是否相等。
  4. __hash__()方法:如果类的所有字段都是不可变的(如str、int等),dataclass会自动生成一个哈希方法,以便对象可以用作字典的键。

自定义dataclass的行为

虽然dataclass提供了许多默认行为,但你也可以根据需要进行自定义。例如,我们可以使用@dataclass装饰器的参数来指定不同的行为。以下是一些常见的自定义选项:

  • init:如果设置为False,将不会生成__init__()方法,这在创建不可变对象时很有用。
  • repr:如果设置为False,将不会生成__repr__()方法,这在不需要可读性良好的字符串表示时很有用。
  • eq:如果设置为False,将不会生成__eq__()方法,这在不需要比较对象相等性时很有用。
  • frozen:如果设置为True,将会生成一个不可变的类,所有字段都将变成只读属性。

以下是一个示例,演示如何自定义dataclass的行为:

from dataclasses import dataclass

@dataclass(init=False, repr=False, eq=False)
class CustomPerson:
    name: str
    age: int

# 创建一个CustomPerson对象
custom_person = CustomPerson("Charlie", 35)

# 由于我们禁用了__init__,无法初始化对象
# 打印会引发错误
print(custom_person)  # 引发错误

在上述示例中,我们禁用了__init__()__repr__()__eq__()方法,导致无法创建对象或进行比较。

总结

dataclass是一个强大的工具,用于创建用于存储数据的类。它消除了编写大量重复的代码的需要,使代码更简洁、可读性更高。通过合理使用dataclass的自定义选项,我们可以根据需要定制类的行为。希望这篇文章对大家理解和使用dataclass有所帮助。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1386766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt点击按钮在其附近弹出一个窗口

效果 FS_PopupWidget.h #ifndef FS_POPUPWIDGET_H #define FS_POPUPWIDGET_H#pragma once#include <QToolButton> #include <QWidgetAction> #include <QPointer>class QMenu;class FS_PopupWidget : public QToolButton {Q_OBJECTpublic:FS_PopupWidget(QW…

3dmax有哪些技巧?3damx不为人知的秘密

在装修设计和建筑可视化领域&#xff0c;3D MAX是一款强大的工具&#xff0c;可以帮助我们创建出高质量的3D模型和动画。然而&#xff0c;要充分发挥其潜力&#xff0c;我们需要掌握一些3D MAX渲染的技巧。以下是一些实用的技巧&#xff0c;帮助你提高渲染效率和质量。 合理设…

【总结】Dinky学习笔记

概述 Dinky 是一个开箱即用、易扩展&#xff0c;以 Apache Flink 为基础&#xff0c;连接 OLAP 和数据湖等众多框架的一站式实时计算平台&#xff0c;致力于流批一体和湖仓一体的探索与实践 官网&#xff1a;Dinky 核心特性 沉浸式&#xff1a;提供专业的 DataStudio 功能&a…

mysql8 源码编译 客户端连接运行 报段异常解决

mysql8 源码编译 客户端连接运行 报段异常解决。解决方案&#xff1a;删除之前编译的文件。先安装libncurses-dev依赖&#xff0c;在重新编译。原因&#xff1a;第一次编译没有libncurses-dev依赖&#xff0c;编译告警&#xff0c;再次编译有缓存&#xff0c;没有引入声明头文件…

Umi3 创建,配置环境,路由传参(代码示例)

目录 创建项目 配置环境 创建脚手架 项目结构及其目录、 路由 配置路由 嵌套路由 编程式导航和声明式导航 声明式导航 编程式导航 约定式路由 路由传参 query传参&#xff08;问号&#xff09; 接收参数 params传参&#xff08;动态传参&#xff09; 接收参数 创…

[zabbix] zabbix监控

一、温习zabbix自定义监控 二、zabbix 自动发现与自动注册 2.1 zabbix 自动发现 //zabbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09; zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数…

SpringBoot教程(五) | SpringBoot中Controller详解

SpringBoot教程(五) | SpringBoot中Controller详解 SpringBoot整合SpringMvc其实千面一直讲的都是。只需要我们在pom文件中引入 web的starter就可以了&#xff0c;然后我们就可以正常使用springMvc中的功能了。所以本篇文章可能更多的是回顾&#xff0c;回顾一下springMVC中的…

Centos7 制作系统镜像iso文件

Centos7 制作系统镜像iso文件 1. 系统备份镜像1.1 安装mondo1.2 制作备份镜像1.3 恢复系统 1. 系统备份镜像 这部分针对有系统备份需求&#xff0c;防止系统遭受意外状况&#xff0c;无法紧急恢复。整体备份内容较大&#xff0c;建议考虑后再进行操作 本次使用mondo软件进行备…

代码随想录算法训练营第28天 | 93.复原IP地址 78.子集 90.子集II

目录 93.复原IP地址 &#x1f4a1;解题思路 回溯三部曲 # 判断子串是否合法 &#x1f4bb;实现代码 78.子集 &#x1f4a1;解题思路 回溯三部曲 &#x1f4bb;实现代码 90.子集II &#x1f4a1;解题思路 &#x1f4bb;实现代码 93.复原IP地址 题目链接&#x…

Rocketmq rust版本-开篇

我是蚂蚁背大象(Apache EventMesh PMC&Committer)&#xff0c;文章对你有帮助给Rocketmq-rust star,关注我GitHub:mxsm&#xff0c;文章有不正确的地方请您斧正,创建ISSUE提交PR~谢谢! Emal:mxsmapache.com Rust重构Rocketmq,大家好我是mxsm(Apache EventMesh PMC&Comm…

Linux网络编程---IP 地址格式转换函数

Linux网络编程—IP 地址格式转换函数 我们更容易阅读的IP地址是以点分十进制表示的&#xff0c;例如&#xff1a;192.168.5.10 &#xff0c;这是一种字符串的形式&#xff0c;但是计算器所需要的IP地址是以二进制进行表示&#xff0c;这便需要我们在点分十进制字符串和二进制地…

Swift 周报 第四十五期

文章目录 前言新闻和社区苹果或将扩充健康版图&#xff0c;为Apple Watch X铺路更新后的《Apple Developer Program 许可协议》现已发布 提案通过的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第四十五期&#xff0c;每个模块已初步成型。各位…

【Linux】初识Linux及几个基本指令

Hello everybody!算算时间我已经有一个多月没有更新啦&#xff01;因为本专业是纺织工程&#xff0c;所以一直在复习应付期末考试\(0^◇^0)/。那好&#xff0c;废话不多说。让我们进入今天的主题&#xff01; 关于Linux系统可能很多同学不是很熟悉&#xff0c;有的人可能听过&…

《ORANGE’S:一个操作系统的实现》读书笔记(三十一)文件系统(六)

上一篇文章记录了对文件的读写操作&#xff0c;那么文件操作到目前为止&#xff0c;已经完成了创建和读写&#xff0c;还剩下的常用操作就是删除文件了。这篇文章就来记录删除文件的实现以及总结一下为文件系统添加系统调用的步骤。 删除文件 删除是添加的反过程&#xff0c;…

EndNote登录一直显示The username/password specified is not valid

EndNote登录一直显示The username/password specified is not valid EndNote20今天想打开之前的share library的时候一直显示 ‘The Username/password specified is not valid’&#xff0c;查了很多解决方案&#xff0c;现在献上解决方案&#xff1a; 该密码然后重新登陆…

如何在 SwiftUI 中使用 AccessibilityCustomContentKey 修饰符

文章目录 前言创建 User 结构体添加辅助修饰符使用新的修饰符使用修饰符来替换和覆盖数据可运行代码总结 前言 SwiftUI 3 发布了许多新的辅助功能 API&#xff0c;我们可以利用这些 API 以轻松的方式显著提高用户体验。本篇文章来聊聊另一个新的 API&#xff0c;我们可以使用 …

数仓面试之手写拉链表SQL,并分析有多少个job

数仓面试之手写拉链表SQL&#xff0c;并分析有多少个job 拉链表定义 维护历史状态&#xff0c;以及最新状态数据的一种表&#xff0c;拉链表根据拉链粒度的不同&#xff0c;实际上相当于快照&#xff0c;只不过做了优化&#xff0c;去除了一部分不变的记录而已,通过拉链表可以…

phpinfo和php -m 加载的php.ini不一致

目的&#xff1a; 将phpinfo在web中展示的php.ini和在命令行中展示的php.ini加载路径设置一致。 原本的php.ini加载路劲是&#xff1a; /usr/local/lib/php.ini 解决思路&#xff1a; &#xff08;1&#xff09;which php 查看服务器加载的php的位置&#xff0c;这里原来是&a…

Sketch不会安装?教你在Windows中打开Sketch!

使用 Windows 系统的 UI 设计师可能遇到过这样一个问题&#xff1a;他们收到了其他人发送的 Sketch 文件&#xff0c;但 Windows 系统无法打开 Sketch 文件&#xff0c;也不知道如何在 Windows 上打开 Sketch 文件。这是一个真实工作场景的问题。对于这个问题&#xff0c;即时设…

RT-Thread: 控制台调试串口波特率更改

说明&#xff1a;rt_kprintf 函数是RT 的一个调试接口使用的函数&#xff0c;波特率默认是 115200 &#xff0c;本文介绍更改这个波特率。 1.根据截图路径找到文件 serial.h 修改如下代码中关于波特率定义部分。 /* Default config for serial_configure structure */ #defin…