Python中dataclass库

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),将生成

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveKenny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值