当前位置: 首页 > news >正文

小黑黑日常积累:dataclass的简单使用

在Python中,dataclass是dataclasses模块提供的一个装饰器,用于简化类的定义,自动生成诸如__init__、__repr__等方法。以下是dataclass的简单使用方法:

基本使用

定义一个简单的dataclass只需使用@dataclass装饰器并声明类的属性,可以使用frozen=True冻结参数(对象初始化后,参数不得修改)

from dataclasses import dataclass@dataclass
class Student(object):sid:intname:strage:intscore:floatgender:str
# 使得对象经过初始化后参数不能修改
@dataclass(frozen=True)
class Class:name: strmember: list[Student]s1 = Student(1, 'daheilv', 28, 59, 'male')
s1_copy = Student(1, 'daheilv', 28, 59, 'male')
print(s1)
s2 = Student(1, 'xiaohei', 27, 99, 'male')
print(s2)
print('s1==s1_copy:',s1==s1_copy)
donkeyClass = Class('donkeyClass', [s1, s2])

Student(sid=1, name=‘daheilv’, age=28, score=59, gender=‘male’)
Student(sid=1, name=‘xiaohei’, age=27, score=99, gender=‘male’)
s1==s1_copy: True

无法修改参数

# 改变一下donkeyClass属性值
donkeyClass.name = 'CawClass'

在这里插入图片描述
在 Python 的 dataclass 中,field 用于定制化字段的行为。默认情况下,dataclass 会自动生成 init 方法,并为每个类变量赋予相应的值。但通过 field,可以更灵活地控制字段的初始化、默认值、比较行为等。
default_factory允许动态生成默认值,常用于初始化可变对象(如列表、字典等)

from dataclasses import dataclass, field, asdict
@dataclass
class Cat:name: strcolor: strweight: str = field(default='5')children1:list=field(default_factory=lambda:[1,2,3])children2:dict=field(default_factory=lambda:{'name':'猫'})
tom = Cat('Tom', 'red')
tom

Cat(name=‘Tom’, color=‘red’, weight=‘5’, children1=[1, 2, 3], children2={‘name’: ‘猫’})
通过init=False使得该参数不被init方法所接收

@dataclass
class Cat_reprFalse:name: strcolor: strweight: str = field(default='5')children1:list=field(default_factory=lambda:[1,2,3])children2:dict=field(default_factory=lambda:{'name':'猫'}, init=False)
tom = Cat_reprFalse('Tom', 'red','5',[1,2,3],{'name':'猫'})

在这里插入图片描述
通过repr=False使得该参数不被打印

@dataclass
class Cat_reprFalse:name: strcolor: strweight: str = field(default='5')children1:list=field(default_factory=lambda:[1,2,3])children2:dict=field(default_factory=lambda:{'name':'猫'}, repr=False)
tom = Cat_reprFalse('Tom', 'red','5',[1,2,3],{'name':'猫'})
tom

Cat_reprFalse(name=‘Tom’, color=‘red’, weight=‘5’, children1=[1, 2, 3])

继续加油,先不沉迷细节,把流程走通!!请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

http://www.xdnf.cn/news/874531.html

相关文章:

  • AtCoder解析大全
  • 在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
  • 基于 qiankun + vite + vue3 构建微前端应用实践
  • 长参考帧LTR
  • 前端八股之JS的原型链
  • 20-项目部署(Docker)
  • 【人工智能】大模型的创造力:从训练到应用的灵感火花
  • 如何配置deepseek + ida-pro-mcp
  • 让AI看见世界:MCP协议与服务器的工作原理
  • [AI Claude] 软件测试2
  • JS利用原型链实现继承
  • Spring 中的disposableBean介绍
  • C语言数据结构笔记2:结构体地址的遍历_结构体嵌套
  • Java DLL依赖缺失解决思路和修复过程(Windows版本)
  • JVM 内存结构 详解
  • 【Java】CopyOnWriteArrayList
  • 使用 SseEmitter 实现 Spring Boot 后端的流式传输和前端的数据接收
  • 陈伟霆电视剧《九门》开机 续写传奇热血新篇
  • 【博客X】缤果串口蓝牙网络USB调试助手(总汇)
  • python打卡day44
  • 如何通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式(并进行了训练、推理)
  • SQL 中 IN 和 EXISTS 的区别
  • 局部变量-线程安全
  • 池化层-机器学习
  • 5.Promise,async,await概念(1)
  • 【SpringCloud】Nacos配置中心
  • 【HarmonyOS 5】游戏开发教程
  • 面向文档编程:MoonBit 的创新开发体验
  • 照片按时间自动重命名工具
  • Java异常信息