码农知识堂 - 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),将生成

  • 相关阅读:
    C#基础知识
    K8S--常用的命令
    MFC扩展库BCGControlBar Pro v35.0新版亮点:重新设计的工具栏编辑器等
    STL:map/multimap容器详解
    flink 流计算一条一条处理日志
    JAVA12_05学习总结(JDBC!)
    自古以来,同步/异步都是八股文第一章
    微信朋友圈的高级玩法!你一定要知道!
    python multiprocessing 报错解决
    六月集训(23)字典树
  • 原文地址:https://blog.csdn.net/qq_62789540/article/details/127069914
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号