dataclass装饰器
1|0简介
根据定义dataclass时指"一个带有默认值的可变的namedtuple"
简单来说,就是你定义一个很普通的类,@dataclass装饰器可以
帮你生成__repr__、__init__等方法,就不用自己写一遍了。但是
此装饰器返回的依然是一个class类,这意味着并没有带来任何不便,
你依然可以使用继承、metaclass、docstring、定义方法等。
2|0示例,解决实例化,__init__参数过多时的问题
上面的代码会自动帮我们生成__init__初始化方法
3|0示例,优雅的方式表示嵌套
4|0示例,对象初始化后禁止改变
5|0示例,使用工厂函数为属性的默认值定义为空列表
6|0示例,使用field不初始化某个属性的值(因为默认的会初始化每个属性的值)
7|0介绍field
通过上面的两个例子,我们认识到了field的两个作用:
在初始化可变默认值(mutable default) 情况下,必须要通过field的默认工厂函数来进行声明。
可以通过field来控制某一个成员变量是否被初始化。
下面我们详细介绍一下field的工作流程。
dataclass装饰器的工作流程:
如果不单独调用field方法,dataclass装饰器就对被dataclass装饰的对象中的每个成员变量(按照上述函数原型中的默认值)执行操作
因为上面的默认值中init=True,所以默认情况下,被dataclass装饰的对象中的所有成员变量会执行init操作。
因为上面的默认值中default=MISSING,所以默认情况下,被dataclass装饰的对象中的所有成员变量没有默认值。
因为上面的默认值中default_factory=MISSING,所以默认情况下,被dataclass装饰的对象中的所有成员变量没有默认的工厂函数。
如果想要控制被dataclass装饰的对象中的每个成员变量的具体执行动作,可以在成员变量构造的时候,设置单独的field方法
比如不想初始化某一个成员变量,就可以将field方法设置为init=False。 这就是上面的3.1.2. 章节的内容
也可以通过field方法设置某一个成员变量的默认值,但是这样有点大材小用了。
8|0特殊的__post_init__方法
__EOF__

本文链接:https://www.cnblogs.com/weiweivip666/p/16667137.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
-------------------------------------------
个性签名:代码过万,键盘敲烂!!!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人