写点什么

软件测试 / 测试开发丨 Python 数据类 dataclass 学习笔记

作者:测试人
  • 2023-07-18
    北京
  • 本文字数:1427 字

    阅读完需:约 5 分钟

免费领取:测试资料+性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档

本文为霍格沃兹测试开发学社学员学习笔记分享

原文链接:https://ceshiren.com/t/topic/26238

dataclass 介绍

  • dataclass 优势可读性强操作灵活轻量

  • 应用场景创建对象完美融合平台开发 ORM 框架

案例

  • 场景:如果创建一只猫,信息包括猫的名字、体重、颜色。同时打印这个对象的时候,希望能打印出一个字符串(包含猫的各种信息)应该如何编写代码问题:数据修改不方便代码冗余解决方案:使用自定义类实现数据类

class Cat:    name: str    color: str    weight: int
def __init__(self,name,weight,color): self.name = name self.weight = weight self.color = color
def __str__(self): return f"喵星人姓名:{self.name}, 年龄:{self.weight},颜色:{self.color}"
def __repr__(self): return f"===>>>>> 喵星人姓名:{self.name}, 年龄:{self.weight},颜色:{self.color}"
复制代码

数据类更优雅的实现方案

  • 使用 dataclass 创建数据类

  • 实例化的时候自动生成构造函数

from dataclasses import dataclass@dataclassclass Cat:    name: str    color: str    weight: int
if __name__ == '__main__': cat = Cat("菠萝", "橘猫", 9)
复制代码

field 的使用

# 错误写法,执行报错@dataclassclass Cat:    name: str    color: str    weight: int    children: list=[1,2,3]
复制代码


# 正确写法,可变类型必须使用fieldfrom dataclasses import dataclass, field
@dataclassclass Cat: name: str color: str weight: int = 2 children: list = field(default_factory=list)
if __name__ == '__main__': cat = Cat("菠萝", "橘猫", 9, [1,2,3])
复制代码

field 常用参数

field default 参数

  • 字段的默认值

@dataclasses.dataclassclass Cat:    name: str    color: str    weight: str = dataclasses.field(default=5)    children: list = dataclasses.field(default_factory=list)    children1: list = dataclasses.field(default_factory=lambda:[1,2,3])    children2: dict = dataclasses.field(default_factory=lambda: {"name":"喵"})
复制代码

field init 参数

  • 如果为 True(默认值),该字段作为参数包含在生成的 init() 方法中。

  • 如果为 False,该字段不会包含 init() 方法参数中。

@dataclasses.dataclassclass Cat:    name: str    color: str    weight: str = dataclasses.field(default=5)    children: list = dataclasses.field(default_factory=list,init=False)
复制代码

field repr 参数

  • 如果为 True(默认值),该字段包含在生成的 repr() 方法返回的字符串中。

  • 如果为 False,该字段不会包含在生成的 repr() 方法返回的字符串中。

@dataclasses.dataclassclass Cat:    name: str    color: str    weight: str = dataclasses.field(default=5)    children: list = dataclasses.field(default_factory=list,repr=False)
复制代码

常用的方法

  • asdict() 转化实例对象为字典格式

class Cat:    name: str    color: str    weight: int = dataclasses.field(default=5)    # 无参的函数    children: list = dataclasses.field(default_factory=lambda:[1,2,3])    children1: dict = dataclasses.field(default_factory=lambda: {"name":"喵"})
cat = Cat("aa","red",10,[1,3],{"name":"喵喵"})dataclasses.asdict(cat)
复制代码


发布于: 刚刚阅读数: 5
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨Python 数据类 dataclass 学习笔记_Python_测试人_InfoQ写作社区