首页 > 编程语言 >python@dataclass使用

python@dataclass使用

时间:2024-04-17 13:13:51浏览次数:23  
标签:__ pp python next 使用 dataclass 默认值 字典

Python 的 dataclass 是 Python 3.7 中引入的一个装饰器和类库,用于自动添加特殊方法,如 __init____repr__,到用户定义的类。dataclass 使得定义类变得更加简洁,同时它也提供了许多有用的特性,比如默认值、类型提示等。

以下是一个 dataclass 的例子:

from dataclasses import dataclass

@dataclass
class InventoryItem:
    name: str
    unit_price: float
    quantity_on_hand: int = 0

    def total_cost(self) -> float:
        return self.unit_price * self.quantity_on_hand

在上面的代码中,我们使用了dataclass装饰器来定义一个名为InventoryItem的类。该类包含三个属性:name、unit_price和quantity_on_hand。其中,quantity_on_hand属性还有一个默认值0。此外,我们还定义了一个名为total_cost()的方法来计算库存项目的总成本。

使用dataclass装饰器可以让我们省去手动编写特殊方法的步骤,从而使代码更加简洁易读。同时,它还提供了一些其他的好处,例如:

自动生成特殊方法,例如__init__()__repr__() 可以使用默认值进行初始化 可以自定义其他方法

你可能会问,为什么不直接使用字典而要使用 dataclass 呢?以下是一些理由:

  1. 类型提示和检查:在 dataclass 中,你可以为每个字段指定类型。这不仅可以帮助你编写更清晰、更易于理解的代码,而且某些 IDE 和工具可以利用这些信息提供更好的自动完成和错误检查功能。

  2. 默认值dataclass 允许你为字段设置默认值,而在字典中,你需要手动检查和设置默认值。

  3. 易于阅读和使用:当你查看一个 dataclass 对象的字符串表示时,你可以清晰地看到它的字段名和值。而对于字典,你只能看到值。

  4. 方法和行为dataclass 是类,因此你可以在其中定义方法。而字典不能有方法。

总的来说,dataclass 提供了比字典更丰富、更强大的功能,使得你的代码更易于编写和维护。如果你只需要存储和检索值,那么字典可能更简单、更快速。但是,如果你需要更复杂的行为和更强的类型检查,那么 dataclass 可能更适合你。​

dataclass还可以让python以更简洁的方式实现c中的结构体操作,代码量和可读性上都有极大提升

使用dataclass构建链表结构示例:

from dataclasses import dataclass
@dataclass
class pp:
    id:int
    next:"pp" #使用双引号括起自定义类类型名

l1=pp(0,None)
l2=pp(1,None)
l1.next = l2
print(l1)
#pp(id=0, next=pp(id=1, next=None))

标签:__,pp,python,next,使用,dataclass,默认值,字典
From: https://www.cnblogs.com/kabaiye/p/18140367

相关文章

  • python爬虫使用selenium
    由于selenium更各版本用法不一,本文使用的环境是selenium4.13,python3.11.0,不同环境可能失效忽略这一行安装pipinstallselenium安装驱动chrome浏览器谷歌驱动官网下载地址如果你的谷歌是最新版(在设置-关于Chrome查看版本),直接前往最新版下载地址你还可以访问这个json文件......
  • Python-GPU-编程实用指南(一)
    PythonGPU编程实用指南(一)原文:zh.annas-archive.org/md5/ef7eb3c148e0cfdfe01c331f2f01557c译者:飞龙协议:CCBY-NC-SA4.0前言问候和祝福!本文是关于使用Python和CUDA进行GPU编程的入门指南。GPU可能代表图形编程单元,但我们应该明确,这本书不是关于图形编程——它本质......
  • Python-GPU-编程实用指南(三)
    PythonGPU编程实用指南(三)原文:zh.annas-archive.org/md5/ef7eb3c148e0cfdfe01c331f2f01557c译者:飞龙协议:CCBY-NC-SA4.0第十章:使用已编译的GPU代码在本书的过程中,我们通常依赖PyCUDA库自动为我们接口我们的内联CUDA-C代码,使用即时编译和与Python代码的链接。然而......
  • Python-物联网项目(一)
    Python物联网项目(一)原文:zh.annas-archive.org/md5/34135f16ce1c2c69e5f81139e996b460译者:飞龙协议:CCBY-NC-SA4.0前言物联网承诺解锁真实世界,就像互联网几十年前解锁了数百万台计算机一样。树莓派计算机于2012年首次发布,迅速风靡全球。最初设计的目的是给新一代带来与......
  • Python-物联网项目(五)
    Python物联网项目(五)原文:zh.annas-archive.org/md5/34135f16ce1c2c69e5f81139e996b460译者:飞龙协议:CCBY-NC-SA4.0第十九章:评估第一章第一款树莓派是在哪一年推出的?A.2012树莓派3ModelB+相对于上一个版本有哪些升级?A.处理器升级到1.4GHz,支持5GHz无线局......
  • Python-物联网项目(四)
    Python物联网项目(四)原文:zh.annas-archive.org/md5/34135f16ce1c2c69e5f81139e996b460译者:飞龙协议:CCBY-NC-SA4.0第十四章:使用Python控制机器人小车在第十三章中,介绍树莓派机器人小车,我们建造了T.A.R.A.S机器人小车。在章节结束时,我们讨论了如何通过代码控制T.A.R.A......
  • Python-物联网项目(三)
    Python物联网项目(三)原文:zh.annas-archive.org/md5/34135f16ce1c2c69e5f81139e996b460译者:飞龙协议:CCBY-NC-SA4.0第十章:发布到Web服务在物联网的核心是允许与物理设备交互的Web服务。在本章中,我们将探讨使用Web服务来显示来自树莓派的传感器数据的用途。我们还将研......
  • Python-物联网项目(二)
    Python物联网项目(二)原文:zh.annas-archive.org/md5/34135f16ce1c2c69e5f81139e996b460译者:飞龙协议:CCBY-NC-SA4.0第六章:使用伺服控制代码控制模拟设备继续我们的旅程,将模拟仪表的优雅与数字数据的准确性相结合,我们将看看我们在前两章中学到的内容,并构建一个带有模拟仪表......
  • Python-企业自动化实用指南(四)
    Python企业自动化实用指南(四)原文:zh.annas-archive.org/md5/0bfb2f4dbc80a06d99550674abb53d0d译者:飞龙协议:CCBY-NC-SA4.0第十八章:使用Python构建网络扫描器在本章中,我们将构建一个网络扫描器,它可以识别网络上的活动主机,并且我们还将扩展它以包括猜测每个主机上正在运......
  • python抽帧及生成高质量的GIF图
    python抽帧及生成高质量的GIF图对视频进行抽帧只需要两个模块即可:opencv-python(cv2)opencv-contrib-python我们都知道视频有分辨率,即视频的宽度与高度,还有视频的帧速率,即每秒有多少帧。对视频进行抽帧,有两种方式,一种是每秒抽取一帧,另一种是每秒所有帧的抽取。 importos......