目录
- dataclass语法
- 一、 简介
- 二、 装饰器参数
- 三、 数据属性
- 1、 参数
- 2、 使用示例
- 3、 注意事项
- 四、 其他
- 1、 常用函数
- 2、 继承
- 3、 总结
dataclass的定义位于python.org/dev/peps/pep-0557/" rel="external nofollow noreferrer">PEP-557,根据定义一个dataclass是指“一个带有默认值的可变的namedtuple”,广义的定义就是有一个类,它的属性均可公开访问,可以带有默认值并能被修改,而且类中含有与这些属性相关的类方法,那么这个类就可以称为dataclass , 再通俗点讲,dataclass就是一个含有数据及操作数据方法的容器 。
乍一看可能会觉得这个概念不就是普通的class么 , 然而还是有几处不同:
- 相比普通class,dataclass通常不包含私有属性,数据可以直接访问
- dataclass的repr方法通常有固定格式,会打印出类型名以及属性名和它的值
- dataclass拥有
__eq__
和__hash__
魔法方法 - 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
【Python中dataclass库】同时,我们也可以添加__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()
:init
:如果为true(默认),python.org/3.9/reference/datamodel.html#object.__init__" rel="external nofollow noreferrer">__init__()
将生成一个方法 。
如果类已经定义python.org/3.9/reference/datamodel.html#object.__init__" rel="external nofollow noreferrer">__init__()
,则忽略此参数 。
repr
:如果为true(默认),python.org/3.9/reference/datamodel.html#object.__repr__" rel="external nofollow noreferrer">__repr__()
将生成一个方法 。生成的 repr 字符串将具有类名以及每个字段的名称和 repr,按照它们在类中定义的顺序 。不包括标记为从 repr 中排除的字段 。例如:。InventoryItem(name='widget', unit_price=3.0, quantity_on_hand=10)
如果类已经定义python.org/3.9/reference/datamodel.html#object.__repr__" rel="external nofollow noreferrer">__repr__()
, 则忽略此参数 。
eq
:如果为true(默认) , python.org/3.9/reference/datamodel.html#object.__eq__" rel="external nofollow noreferrer">__eq__()
将生成一个方法 。此方法按顺序比较类,就好像它是其字段的元组一样 。比较中的两个实例必须是相同的类型 。
如果类已经定义python.org/3.9/reference/datamodel.html#object.__eq__" rel="external nofollow noreferrer">__eq__()
,则忽略此参数 。
order
: 如果为真(默认为False
),将生成python.org/3.9/reference/datamodel.html#object.__lt__" rel="external nofollow noreferrer">__lt__()
、 python.org/3.9/reference/datamodel.html#object.__le__" rel="external nofollow noreferrer">__le__()
、python.org/3.9/reference/datamodel.html#object.__gt__" rel="external nofollow noreferrer">__gt__()
和方法 。python.org/3.9/reference/datamodel.html#object.__ge__" rel="external nofollow noreferrer">__ge__()
这些按顺序比较类,就好像它是其字段的元组一样 。比较中的两个实例必须是相同的类型 。如果order
为真且eq
为假, python.org/3.9/library/exceptions.html#ValueError" rel="external nofollow noreferrer">ValueError
则引发 a 。
如果该类已经定义了python.org/3.9/reference/datamodel.html#object.__lt__" rel="external nofollow noreferrer">__lt__()
、 python.org/3.9/reference/datamodel.html#object.__le__" rel="external nofollow noreferrer">__le__()
、python.org/3.9/reference/datamodel.html#object.__gt__" rel="external nofollow noreferrer">推荐阅读
- 国产三轮摩托车排名前十名-中国三轮摩托车排行榜
- 抖音中怎么和短视频中的人进行合拍(抖音无缝合拍突然没有是什么原因)
- 【Python+C#】手把手搭建基于Hugging Face模型的离线翻译系统,并通过C#代码进行访问
- 国内大型钢铁厂综合实力排名 中国钢厂实力排名
- 中国数字化是怎么转型成新范式TOP 50的?
- 中小制造企业需要ERP和MES吗?
- 如何通过 Java 代码隐藏 Word 文档中的指定段落
- Python实现给图片加水印功能
- Monaco Editor 中的 Keybinding 机制
- python-函数-统计函数