Python中dataclass库

目录

  • dataclass语法
    • 一、 简介
    • 二、 装饰器参数
    • 三、 数据属性
      • 1、 参数
      • 2、 使用示例
      • 3、 注意事项
    • 四、 其他
      • 1、 常用函数
      • 2、 继承
      • 3、 总结
dataclass语法一、 简介官方文档的地址为:python.org/3.9/library/dataclasses.html" rel="external nofollow noreferrer">https://docs.python.org/3.9/library/dataclasses.html
dataclass的定义位于python.org/dev/peps/pep-0557/" rel="external nofollow noreferrer">PEP-557,根据定义一个dataclass是指“一个带有默认值的可变的namedtuple”,广义的定义就是有一个类,它的属性均可公开访问,可以带有默认值并能被修改,而且类中含有与这些属性相关的类方法,那么这个类就可以称为dataclass,再通俗点讲,dataclass就是一个含有数据及操作数据方法的容器 。
乍一看可能会觉得这个概念不就是普通的class么,然而还是有几处不同:
  1. 相比普通class,dataclass通常不包含私有属性,数据可以直接访问
  2. dataclass的repr方法通常有固定格式,会打印出类型名以及属性名和它的值
  3. dataclass拥有__eq____hash__魔法方法
  4. dataclass有着模式单一固定的构造方式,或是需要重载运算符,而普通class通常无需这些工作
我们来创建一个实例:
from dataclasses import dataclass@dataclassclass InventoryItem:"""Class for keeping track of an item in inventory."""name: strunit_price: floatquantity_on_hand: int = 0def 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 = nameself.unit_price = unit_priceself.quantity_on_hand = quantity_on_hand
同时使用dataclass也有一些好处,它比namedtuple更灵活 。同时因为它是一个常规的类,所以你可以享受继承带来的便利 。
二、 装饰器参数参数为python.org/3.9/library/dataclasses.html#dataclasses.dataclass" rel="external nofollow noreferrer">dataclass()