python的dataclasses

news/2025/1/17 14:25:36/文章来源:https://www.cnblogs.com/pywen/p/18676918

在写代码过程中,我们经常需要创建一些简单的类来存储数据。传统方式需要手动编写__init____repr____eq__等方法,不仅繁琐还容易出错。直到引入的dataclasses模块。

安装

Python 3.6,可以通过pip安装:

pip install dataclasses

【3.7 +的内置模块,无需安装即可使用】

 

基本用法

from dataclasses import dataclass@dataclass
class Book:title: strauthor: strprice: floatpages: int = 0book = Book("python", "Lowen", 99)
print(book)  #Book(title='python', author='Lowen', price=99, pages=0)
print(book.title)  #python
print(book.author) #Lowen
print(book.price) #99
print(book.pages) #0

  

只需要添加@dataclass装饰器,就自动获得了:

  • 初始化方法
  • 字符串表示
  • 比较方法
  • 可选的默认值支持

 

高级用法

from dataclasses import dataclass, field, asdict, replace@dataclass(frozen=True) # 创建不可变类
class Point:x: floaty: float# 使用field自定义字段属性coordinates: tuple = field(default_factory=tuple, repr=False)# 不可变对象
p1 = Point(3, 4)
p11 = Point(3, 4, (4,))
print(p1)  # Point(x=3, y=4)
print(p11.coordinates[0])  # 4
# p11.x = 5  # 这会引发错误# 转换为字典
point_dict = asdict(p1)
print(point_dict)  # {'x': 3, 'y': 4, 'coordinates': ()}# 创建对象的修改副本
p2 = replace(p1, x=5)
print(p2)  # Point(x=5, y=4)

  

实战用法

from dataclasses import dataclass, field
from typing import List
from decimal import Decimal@dataclass
class Product:name: strprice: Decimalquantity: int = 0@dataclass
class ShoppingCart:items: List[Product] = field(default_factory=list)def add_item(self, product: Product):self.items.append(product)@propertydef total(self) -> Decimal:return sum(item.price * item.quantity for item in self.items)# 使用示例
cart = ShoppingCart()
cart.add_item(Product("Python书籍", Decimal("49.9"), 2))
cart.add_item(Product("键盘", Decimal("299"), 1))
print(f"购物车总价: ¥{cart.total}")

  

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

瑞芯微开发板/主板Android配置APK默认开启性能模式方法

本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行…

深入解析 Spring AI 系列:分析 Spring AI 可观测性

今天我们将讨论之前略过的可观测性部分的代码。在这里,我想简单说明一下,当时这部分代码属于必须编写的固定模板,因此在最初的讨论中我们直接跳过了它。虽然这部分代码乍看之下可能显得比较复杂,但实际上它的核心功能只是链路追踪的实现而已。既然如此,接下来我们就不再赘…

【Maldev】Early Bird 注入

一、介绍 QueueUserAPC 用于执行本地 APC 注入,APC 注入利用需要一个已挂起或可警报的线程才能成功执行 Payload。但是很难碰到处于这些状态的线程,尤其是以普通用户权限运行的线程,而Early Bird注入则是利用CreateProcess WinAPI 创建一个挂起的进程,并使用其挂起线程的句…

ThreadPool解析

Thread_Pool 项目解析 简介 ThreadPool 是一个轻量级的 C++ 线程池实现,旨在简化多线程编程。 项目分析 我们首先上github的项目地址:https://github.com/progschj/ThreadPool,然后克隆项目到本地。点开项目的ThrealPool.h文件,查看源码: #ifndef THREAD_POOL_H #define TH…

[docker逃逸] 使用DirtyPipe漏洞逃逸

本文作者CVE-柠檬i CSDN:https://blog.csdn.net/weixin_49125123 博客园:https://www.cnblogs.com/CVE-Lemon 微信公众号:Lemon安全 前言 本文使用代码下载链接:利用CVE-2022-0847 (Dirty Pipe) 实现容器逃逸 (github.com) 由于本人才疏学浅,本文不涉及漏洞原理,仅有复现…

RestAPI实现聚合

API语法 聚合条件与query条件同级别,因此需要使用request.source()来指定聚合条件。聚合的结果解析:@Override public Map<String, List<String>> filters(RequestParams params) {try {// 1.准备RequestSearchRequest request = new SearchRequest("hotel&…

elasticsearch之数据聚合

**聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如:什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何?实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近实时搜索效…

【通讯协议】OPC协议

OPC通讯协议 特点:支持多种数据结构和负责数据类型,需要多的硬件和软件资源,成本较高,安全性较高。 应用场景:连接多个不同工业自动化设备 什么是OPC通讯协议 OPC是英文“OLE for Process Control”的缩写,是工业自动化领域中的一种工业通信标准。它通过定义一些在不同平…

海外泼天流量|浅谈全球化技术架构

本文对海外泼天流量现状做了快速整理,旨在抛砖引玉,促进国内企业在出海过程中,交流如何构建全球化技术架构的落地经验,相信会有越来越多资深人士分享更深层次的实践。 登陆小红书,搜索 refugee,你就能看到一个不一样的小红书。随机点击几个,让大数据记住你,就能持续看到…

绿联网卡

目录1: 安装2:检查3:常见问题网络连接有网卡,状态为已禁用 1: 安装插入电脑 弹窗“Setup.exe”,安装驱动, 如果没有驱动,则找到 Ugreen Wireless进行驱动安装。驱动安装成功后效果2:检查驱动安装好后,u盘插拔一下,观察确定是哪个WLAN3:常见问题 网络连接有网卡,状态为…

kali安装教程

kali和GNOME桌面安装教程 kali下载 https://www.kali.org/get-kali/ 到kali官网,下载镜像安装下载完应该是:kali-linux-2024.4-installer-amd64.iso 然后新建虚拟机选择稍后安装操作系统:选择如图所示操作系统 后面的,我都给的挺多,主要不想它卡,哈哈哈网络选择NAT就行,…