码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python中dataclass库


    文章目录

    • dataclass语法
      • 一、 简介
      • 二、 装饰器参数
      • 三、 数据属性
        • 1、 参数
        • 2、 使用示例
        • 3、 注意事项
      • 四、 其他
        • 1、 常用函数
        • 2、 继承
        • 3、 总结

    dataclass语法

    一、 简介

    官方文档的地址为:https://docs.python.org/3.9/library/dataclasses.html

    dataclass的定义位于PEP-557,根据定义一个dataclass是指“一个带有默认值的可变的namedtuple”,广义的定义就是有一个类,它的属性均可公开访问,可以带有默认值并能被修改,而且类中含有与这些属性相关的类方法,那么这个类就可以称为dataclass,再通俗点讲,dataclass就是一个含有数据及操作数据方法的容器。

    乍一看可能会觉得这个概念不就是普通的class么,然而还是有几处不同:

    1. 相比普通class,dataclass通常不包含私有属性,数据可以直接访问
    2. dataclass的repr方法通常有固定格式,会打印出类型名以及属性名和它的值
    3. dataclass拥有__eq__和__hash__魔法方法
    4. dataclass有着模式单一固定的构造方式,或是需要重载运算符,而普通class通常无需这些工作

    我们来创建一个实例:

    from dataclasses import dataclass
    
    @dataclass
    class InventoryItem:
        """Class for keeping track of an item in inventory."""
        name: str
        unit_price: float
        quantity_on_hand: int = 0
    
        def total_cost(self) -> float:
            return self.unit_price * self.quantity_on_hand
    

    同时,我们也可以添加__init__方法:

    def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0):
        self.name = name
        self.unit_price = unit_price
        self.quantity_on_hand = quantity_on_hand
    

    同时使用dataclass也有一些好处,它比namedtuple更灵活。同时因为它是一个常规的类,所以你可以享受继承带来的便利。

    二、 装饰器参数

    参数为dataclass():

    • init:如果为true(默认),__init__()将生成一个方法。

      如果类已经定义__init__(),则忽略此参数。

    • repr:如果为true(默认),__repr__()将生成一个方法。生成的 repr 字符串将具有类名以及每个字段的名称和 repr,按照它们在类中定义的顺序。不包括标记为从 repr 中排除的字段。例如: 。InventoryItem(name='widget', unit_price=3.0, quantity_on_hand=10)

      如果类已经定义__repr__(),则忽略此参数。

    • eq:如果为true(默认),__eq__()将生成一个方法。此方法按顺序比较类,就好像它是其字段的元组一样。比较中的两个实例必须是相同的类型。

      如果类已经定义__eq__(),则忽略此参数。

    • order: 如果为真(默认为False),将生成

  • 相关阅读:
    MIPI CSI-2笔记(16) -- 数据格式(YUV图像数据)
    141.如何个性化推荐系统设计-1
    数字化时代,企业转型发展可能会有哪些特征?
    高性能API云原生网关 APISIX安装与配置指南
    设计模式之兼容不同厂家的相机
    1031 Hello World for U
    spring-brick 插件开发问题整理
    JAVA 自定义注解,实现数据脱敏处理
    CODING DevOps 助力中化信息打造新一代研效平台,驱动“线上中化”新未来
    第02章 Tableau连接数据源
  • 原文地址:https://blog.csdn.net/qq_62789540/article/details/127069914
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号