当前位置: 首页 > 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])

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

相关文章:

  • 高效使用AI大模型:测试工程师提示词编写框架
  • [Java 基础]面向对象-继承
  • 【el-progress】element UI 进度条组件
  • 时间序列预测:LSTM与Prophet对比实验
  • Spring AI Tool Calling
  • 深入解析Java17核心新特性(密封类、模式匹配增强、文本块)
  • C++ 变量三
  • 前端八股之JS的原型链
  • 项目实战——C语言扫雷游戏
  • MySQL ACID 面试深度解析:原理、实现与面试实战
  • SARIMA时间序列分析:三大模型对比
  • Python网页数据抓取常用的库及方法介绍
  • SpringBoot+Mybatisplus配置多数据源(超级简单!!!!)
  • C# 一个解决方案放一个dll项目,一个dll测试项目 ,调试dll项目的源码
  • NLP学习路线图(二十三):长短期记忆网络(LSTM)
  • BERT vs Rasa 如何选择 Hugging Face 与 Rasa 的区别 模型和智能体的区别
  • 祝贺XC3576H通过银河麒麟桌面操作系统的兼容性测试,取得麒麟软件互认证证书
  • tensorflow image_dataset_from_directory 训练数据集构建
  • 力扣刷题Day 70:在排序数组中查找元素的第一个和最后一个位置(34)
  • python3GUI--车牌、车牌颜色识别可视化系统 By:PyQt5(详细介绍)
  • 哪家公司可以做网站/类似58的推广平台有哪些平台
  • 做房地产网站广告销售/关键词搜索技巧
  • 网上哪些网站可以做设计项目/如何做好网络营销推广
  • 运城网站制作/网络软文是什么
  • 淘宝 客要推广网站怎么做/比较正规的代运营
  • 中国建设人才服务信息网是什么网站/黑帽seo技巧