python笔记:dataclass

2024-05-04 10:04
文章标签 python 笔记 dataclass

本文主要是介绍python笔记:dataclass,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 引子:其他类似实现方法的局限性

假设我们现在需要实现这样的内容:

nameChina
area960
population140967

1.1 tuple/list

country1_tuple=('China','960','140967')
country1_tuple[0]
#'China'

缺点:需要记住各个属性是list/tuple第几位的属性(基于位置)

1.2 字典

country1_dict={'name':'China','area':960,'population':140967}
country1_dict['name']
#'China'
  • 不足
    • 不能用country1_dict.name的形式进行控制
    • 少值【country1_dict={'name':'China', 'area':960】一样可以创建成功

1.3 namedtuple

python 库整理: collections.namedtuple_python collections.namedtuple创建一个-CSDN博客

from collections import namedtupleCountry=namedtuple('Country1',['name','area','population'])country1=Country('China',960,'140967')
country2=Country('Singapore',733,564)country1
#Country1(name='China', area=960, population='140967')country2.name
#'Singapore'
  • 弥补了字典的两个缺点
    • 可以用country2.name的形式
    • 少值会报错
  • 不足
    • 无法修改值

1.4 自定义类

class Country:def __init__(self,name,area,population):self.name=nameself.area=areaself.population=populationcountry1_class=Country('China',960,140967)
country1_class.name
#'China'country1_class.name="PRC"
  • 解决了namedtuple无法修改值的问题
  • 不足:
    • __init__方法中重复代码 (示例中每个属性都需要写3遍)

2 数据类dataclass

  • 提供了一个简写__init__方法的语法糖. 
  • 类型注释是必填项
  • 默认值的传递方式和__init__方法的参数格式一致
from dataclasses import dataclass@dataclass
class Country_dc:name:strarea:intpopulation:int=40country_dc1=Country_dc('China',960,140967)
country_dc2=Country_dc('Singapore',733)country_dc1
#Country_dc(name='China', area=960, population=140967)country_dc2
#Country_dc(name='Singapore', area=733, population=40)

2.1 数据嵌套

from typing import List@dataclass
class Countrys_dc:name:strcountries:List[Country_dc]
country_lst=Countrys_dc('China & SG',[country_dc1,country_dc2])
country_lst
'''
Countrys_dc(name='China & SG', countries=[Country_dc(name='China', area=960, population=140967), Country_dc(name='Singapore', area=733, population=40)])
'''

2.2 数据类不可变

 要使数据类不可变,需要在创建类时设置frozen=True。

参考内容:Python中的数据类dataclass详解_python dataclass-CSDN博客

这篇关于python笔记:dataclass的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958937

相关文章

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

Python如何实现 HTTP echo 服务器

《Python如何实现HTTPecho服务器》本文介绍了如何使用Python实现一个简单的HTTPecho服务器,该服务器支持GET和POST请求,并返回JSON格式的响应,GET请求返回请求路... 一个用来做测试的简单的 HTTP echo 服务器。from http.server import HT

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

python中cv2.imdecode()与cv2.imencode()的使用小结

《python中cv2.imdecode()与cv2.imencode()的使用小结》本文介绍了cv2.imencode()和cv2.imdecode()函数的使用,文中通过示例代码介绍的非常详细,对... 目录1、图片路径带中文的读取和写入1.1 读取1.2 写入2、在网络中传输图片cv2.imencod

Python使用asyncio实现异步操作的示例

《Python使用asyncio实现异步操作的示例》本文主要介绍了Python使用asyncio实现异步操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录1. 基础概念2. 实现异步 I/O 的步骤2.1 定义异步函数2.2 使用 await 等待异

python忽略warnings的几种方法

《python忽略warnings的几种方法》本文主要介绍了几种在Python忽略警告信息的方法,,可以使用Python内置的警告控制机制来抑制特定类型的警告,下面就来介绍一下,感兴趣的可以了解一下... 目录方法 1: 使用 warnings 模块过滤特定类型和消息内容的警告方法 2: 使用 warnin

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

python subprocess.run中的具体使用

《pythonsubprocess.run中的具体使用》subprocess.run是Python3.5及以上版本中用于运行子进程的函数,它提供了更简单和更强大的方式来创建和管理子进程,本文就来详细... 目录一、详解1.1、基本用法1.2、参数详解1.3、返回值1.4、示例1.5、总结二、subproce