iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >[python]数据类(dataclass)简介
  • 903
分享到

[python]数据类(dataclass)简介

pythondataclassfield装饰器 2023-10-20 08:10:21 903人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 数据类定义装饰器field初始化数据比较后处理 dataclasses方法 python3.7引入了dataclass。dataclass装饰器可以声明python类为

文章目录


python3.7引入了dataclass。dataclass装饰器可以声明python类为数据类;数据类适合用来存储数据,一般而言它具有如下特征:
  • 数据类表示某种数据类型,数据对象代表一种特定类的实体,包含了实体的属性。
  • 同类型的对象之间可以进行比较;如,大于、小于或等于。

数据类定义

就其本质而言,数据类并没有什么特别之处,只是@dataclass装饰器自动生成__repr__,init,__eq__等一系列方法。定义数据类:

from dataclasses import dataclass@dataclassclass A:  nORMal: str  defVal: int = 0

装饰器

dataclass完整形式为(True为生成对应方法,False将不生成;若类中已定义对应方法,则忽略此参数):
@dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)

  • init:默认将生成__init__方法;
  • repr:默认将生成__repr__方法;repr字符串包含类名、每个字段名称和其repr(按其类中定义顺序);
  • eq:默认将生成__eq__方法;如果传入False,那么__eq__方法将不会被dataclass添加,但会继承object.__eq__(比较id);
  • order:默认不生成__gt__、__ge__、__lt__、__le__方法;
  • unsafe_hash:如果是False(默认),则根据eq和frozen的设置方式生成__hash__()方法(由内置的hash()使用)。
    • 如果eq和frozen都为真,默认情况会生成一个__hash__()方法;
    • 如果eq为真而frozen为假,则__hash__()将被设置为 None,将其标记为不可散列(确实如此,因为它是可变的);
    • 如果eq为假,则__hash__()将保持不变,这意味着将使用超类的__hash__()方法(如果超类是object,将回退到基于id的散列)。
  • frozen:若为true,实例初始化后属性将无法修改;

field

通过field方法,可定制属性:
dataclasses.field(*, default=MISSING, default_factory=MISSING, repr=True, hash=None, init=True, compare=True, metadata=None)

  • default:如果提供,这将是该字段的默认值。
  • default_factory:用于指定具有可变默认值的字段,必须是一个无参可调用对象;与default互斥(不可同时指定)。
  • init:如果为true(默认值),则该字段作为参数包含在生成的__init__()方法中。
  • repr:如果为true(默认值),则该字段包含在生成的__repr__()方法返回的字符串中。
  • compare:如果为true(默认值),则该字段包含在生成的相等性和比较方法中(__eq__() , __gt__()等等)。
  • hash:可以是布尔值或None:
    • 为None(默认值),则使用compare的值,这通常是预期的行为(不鼓励将此值设置为None以外的任何值);
    • 为true,则此字段包含在生成的__hash__()方法中;
    • 设置hash=False但compare=True(即从hash中排除某个字段,但仍用于比较)的一个可能原因是,计算字段的hash代价很高;
  • metadata:这可以是映射或None;None被视为一个空的字典。这个值包含在MappingProxyType()中,使其成为只读,并暴露在Field对象上(是作为第三方扩展机制提供的)。

使用default_factory生成默认值:

from dataclasses import dataclass, fieldimport randomdef build_marks() -> list:    return [random.randint(0, 1000) for i in range(5)]@dataclass(order=True)class RandMark:    marks: list = field(default_factory=build_marks)r = RandMark() # 使用build_marks生成默认值print(r)

初始化

通过dataclass装饰器修饰后的类:

  • 无需定义__init__,dataclass会自动处理;
  • 以易读的方式预先定义成员属性(及类型提示);并可定义默认值;
  • dataclass会自动添加一个__repr__函数;

数据比较

通过@dataclass(order = True)可自动添加比较方法(__eq__和__lt__):

  • 比较是通过属性(字段)生成的元组,进行比较的;如上比较元组为(normal, defVale)

通过compare=False,可设定不用于比较的字段:

@dataclass(order=True)class Student:    name: str = field(compare=False)    score: floats = [Student("mike", 90),    Student("steven", 80),    Student("orange", 70)    ]print(sorted(s)) # 只根据score排序

后处理

通过__post_init__可做后处理(在__init__返回前,自动调用):

from dataclasses import dataclass@dataclassclass FloatNumber:    val: float    decimal: float = 0    integer: float = 0    def __post_init__(self):        self.decimal, self.integer = math.modf(self.val)f = FloatNumber(1.2) # decimal与integer自动赋值

dataclasses方法

dataclasses内置属性与方法:

  • fields(class_or_instance):返回字段Field对象的元组;
  • asdict(instance, *, dict_factory=dict):将数据类转换为字典,(name:value)对;
  • astuple(instance, *, tuple_factory=tuple):将数据类转换为元组;
  • replace(instance, **changes):创建与instance相同类型的新对象,changes为要修改的值;

来源地址:https://blog.csdn.net/alwaysrun/article/details/129637715

--结束END--

本文标题: [python]数据类(dataclass)简介

本文链接: https://www.lsjlt.com/news/432755.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • [python]数据类(dataclass)简介
    文章目录 数据类定义装饰器field初始化数据比较后处理 dataclasses方法 Python3.7引入了dataclass。dataclass装饰器可以声明Python类为...
    99+
    2023-10-20
    python dataclass field 装饰器
  • python的数据类型简介
    ipython:原生python不具有命令行补全等功能,这个工具提供了类似shell的功能,方便学习使用安装:wget https://repo.continuum.io/archive/Anaconda2-5.1.0-Linux-x86...
    99+
    2023-01-31
    数据类型 简介 python
  • python数据类(dataclass)的具体使用
    目录数据类定义装饰器field初始化数据比较后处理dataclasses方法Python3.7引入了dataclass。dataclass装饰器可以声明Python类为数据类;数据类...
    99+
    2023-03-21
    python 数据类
  • ADO.NET数据类型ParameterDirection属性简介
    ParameterDirection属性是ADO.NET中的一个枚举,用于指定参数的类型。它有以下几个可能的值:- Input:表示...
    99+
    2023-09-23
    ADO.NET
  • Python动态类型简介
    在C语言中使用变量, 需先声明其类型, 如int a = 3, 而Python中直接 a = 3就行, Python怎么知道那代表了一个整数呢 在Python中类型是在运行过程中决定的, 而不是事先声明的. 像上面Python中运行赋值语句...
    99+
    2023-01-31
    类型 简介 动态
  • Python 3.7:数据类的介绍
            Python3.7预计在今年夏天发布,让我们一起偷瞄一眼它带来的新功能吧!如果你经常一个人在家用Pycharm撸代码,请确保将你的Pycharm升级到2018.1版本。(等你读完本文再升级也来得及)。Python3.7版...
    99+
    2023-01-31
    数据 Python
  • 【⑬MySQL | 数据类型(一)】简介 | 整数 | 浮点 | 定点类型
    前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL数据类型简介 | 整数 | 浮点 | 定点类型的分享✨ 目录 前言0.数据类型简介1 整数类型2 浮点类型3 定点类型4 日期/时间类型总结 0...
    99+
    2023-08-24
    mysql android 数据库
  • Python 之 Pandas DataFrame 数据类型的简介、创建的列操作
    文章目录 一、DataFrame 结构简介二、DataFrame 对象创建1. 使用普通列表创建2. 使用嵌套列表创建3 指定数值元素的数据类型为 float4. 字典嵌套列表创建5. 添加自...
    99+
    2023-08-31
    pandas python 数据分析
  • DataSource与数据库连接池简介(JDBC简介)
    目录起源为何放弃DriverManager连接池数据源实现核心架构DataSourceAPI小结应用数据库连接池示例总结DataSource是作为DriverManager的替代品而...
    99+
    2022-11-13
    数据库连接池Data Source JDBC数据库连接池Data Source
  • python基本数据类型的介绍
    int(整型)在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-922337203685...
    99+
    2023-01-31
    数据类型 python
  • CIFAR-10 数据集简介
    文章目录 CIFAR-10 简介 CIFAR-10 简介 官网:http://www.cs.toronto.edu/~kriz/cifar.html CIFAR-10和CIFAR-100...
    99+
    2023-09-03
    python 开发语言
  • Python~~简介介绍
    Python (英国发音:/paθn/ 美国发音:/paθɑn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于...
    99+
    2024-04-02
  • Response.ContentType 类型简介
    Response.ContentType 类型是一个枚举类型,用来表示 HTTP 响应的 Content-Type 类型。Conte...
    99+
    2023-09-14
    类型
  • Python——简介
    1、Python社区 Pypi:https://pypi.org/GitHub:https://github.com/StackOverFolw:https://stackoverflow.com/开源中国:https://www.osc...
    99+
    2023-01-31
    简介 Python
  • Python-简介
      @ Python的由来    Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC 语言的一种继承。之所以选中Pyt...
    99+
    2023-01-30
    简介 Python
  • Python 简介
    Python介绍与特点(自学python知识整理) Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计: Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于P...
    99+
    2023-01-31
    简介 Python
  • python简介
    Python是一种开源的面向对象编程语言随着人工智能与大数据分析的火热,python也随之火热起来Python应用广泛,特别适用以下几个方面1.系统编程:提供API(Application Programming Interface,应用程...
    99+
    2023-01-30
    简介 python
  • 数据类型介绍
    目录 什么是数据类型?(掌握) 为何对数据分类?(掌握) 不同数据类型(掌握) 首先让我们回顾变量是什么:变量用来记录世...
    99+
    2023-01-31
    数据类型
  • Python中数据类型的详细介绍
    这篇文章主要讲解了“Python中数据类型的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中数据类型的详细介绍”吧!目录1、字符串2、布尔类型3、整数4、浮点数5、数字6...
    99+
    2023-06-02
  • Python中的基本数据类型介绍
    Python 中主要有8种数据类型:number(数字)、string(字符串)、list(列表)、tuple(元组)、dict(字典)、set(集合)、Boolean(布尔值)、N...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作