首页 > 编程语言 >在python3.7+中优雅的使用dataclass

在python3.7+中优雅的使用dataclass

时间:2023-05-12 18:23:21浏览次数:52  
标签:p1 name dataclasses age Person 优雅 python3.7 dataclass

[本文出自天外归云的博客园]

在 Python 3.7+ 中,dataclasses 是一个非常优雅的工具,可以轻松地创建简单的类,并自动生成常见的类方法,比如 __init____repr__ 等。以下是一些使用 dataclasses 时需要注意的事项:

  1. 导入 dataclasses 模块

在使用 dataclasses 之前,需要先导入 dataclasses 模块。例如:

from dataclasses import dataclass
  1. 使用 @dataclass 装饰器

对于需要使用 dataclasses 的类,只需要在类上加上 @dataclass 装饰器即可自动为其生成常见的类方法。例如:

@dataclass
class Person:
    name: str
    age: int

上述 Person 类使用了 @dataclass 装饰器,并指定了它的两个属性 name 和 age。现在,dataclasses 将自动生成 __init____repr__等类方法。因此,创建一个 Person 对象时不再需要手动编写这些方法。例如:

p1 = Person("Alice", 25)
print(p1)

输出结果为:

Person(name='Alice', age=25)
  1. 使用默认值参数

您可以在使用 @dataclass 装饰器时提供默认值参数。例如:

@dataclass
class Person:
    name: str = "Unknown"
    age: int = 0

这将为 Person 类的 name 和 age 属性提供默认值,从而使它们非必需。当手工创建 Person 对象时,如果指定了 name 和 age 的值,则使用指定值,如果没有指定,则使用默认值。例如:

p1 = Person("Alice", 25)
print(p1)  # Person(name='Alice', age=25)

p2 = Person()
print(p2)  # Person(name='Unknown', age=0)
  1. 使用类型提示

在 dataclasses 中,您可以像平常写 Python 代码时一样使用类型提示。例如:

from typing import List

@dataclass
class Person:
    name: str
    age: int
    hobbies: List[str]

上述 Person 类的 hobbies 属性的类型是 List[str]。这将确保只能为 hobbies 属性分配一个字符串列表。如果有任何类型错误,则会在类型检查阶段抛出错误。此外,您还可以使用其他类型提示,例如 TupleSet 等。

  1. 使用 asdict 方法

dataclasses 还提供了一个称为 asdict 的方法,它将 dataclass 对象转换为一个 Python 字典。例如:

p1 = Person("Alice", 25, ["reading", "traveling"])
print(p1)  # Person(name='Alice', age=25, hobbies=['reading', 'traveling'])

p1_dict = p1.asdict()
print(p1_dict)  # {'name': 'Alice', 'age': 25, 'hobbies': ['reading', 'traveling']}

上述代码将 Person 对象 p1 转换为一个 Python 字典。由于 hobbies 是一个列表,因此转换后的字典中的值也是一个列表。

总之,在 Python 3.7+ 中,dataclasses 是一个非常优雅的工具,可以轻松地创建简单的类,并自动生成常见的类方法。通过使用 dataclasses,您可以节省大量的时间和精力。

标签:p1,name,dataclasses,age,Person,优雅,python3.7,dataclass
From: https://www.cnblogs.com/LanTianYou/p/17395999.html

相关文章

  • SpringBoot定义优雅全局统一Restful API 响应框架四
    如果没有看前面几篇文章请先看前面几篇SpringBoot定义优雅全局统一RestfulAPI响应框架SpringBoot定义优雅全局统一RestfulAPI响应框架二SpringBoot定义优雅全局统一RestfulAPI响应框架三目前我们好像似乎解决所有问题,达到了我们理想的效果如下但是在业务错误返回时候......
  • 优雅的操作文件:java.nio.file 库介绍
    概述在早期的Java版本中,文件IO操作功能一直相对较弱,主要存在以下问题:缺乏对现代文件系统的支持:只提供的基础的文件操作,不支持很多现代的文件系统API不够直观:文件操作的API设计相对较为复杂和冗长,使用体验感很差对于大文件处理和并发性能不够:简单的I/O模型,没有充分......
  • 一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应
    作者:京东物流 覃玉杰1.简介GracefulResponse是一个SpringBoot体系下的优雅响应处理器,提供一站式统一返回值封装、异常处理、异常错误码等功能。使用GracefulResponse进行web接口开发不仅可以节省大量的时间,还可以提高代码质量,使代码逻辑更清晰。强烈推荐你花3分钟学会它!......
  • 列表的批量操作组件封装 + 权限 ,如何更优雅的实现呢?Vue3
    这个组件解决的问题?在以往的项目当中,我从未想过要对批量/列表数据的操作按钮做什么变动,直到最近的一次开发,让我突然觉得可以将操作按钮也做成一个公共组件,在做前端开发时,更加专注于js代码逻辑。如何使用?全局(main.js中)引用操作组件BatchOperation.vue创建页面操作按钮act......
  • Controller层代码就该这么写,简洁又优雅!
    网址:Controller层代码就该这么写,简洁又优雅!(qq.com)......
  • 使用require.context实现优雅的预加载
    前言在前端开发中,对页面花里胡哨度[注1]要求越高的页面,用到的图片、音频什么的就越多,比如什么结婚请柬、展会请柬、发布会宣传页、数据大屏。虽然现在浏览器不允许网页在没有用户交互的情况下播放音频,但是,我们依旧要在页面展现的同时,准备好所有的静态资源。注1:花里胡哨度(garish......
  • SpringBoot定义优雅全局统一Restful API 响应框架三
    我们目前已经设计出了,包含全局响应,异常错误响应进行了统一返回。但是错误内容我们设计的比较模糊统一,还可以进行细化这样更有利于定位错误当我们需要调用Http接口时,无论是在Web端还是移动端,都有可能遇到各种错误,例如参数缺失、类型错误、系统错误等。为了规范错误信息的返回,我们......
  • 新来了个同事,代码命名规范是真优雅呀!代码如诗!!
    新来了个同事,代码命名规范是真优雅呀!代码如诗!!以下文章来源于小姐姐味道 ,作者小姐姐养的狗 日常编码中,代码的命名是个大的学问。能快速的看懂开源软件的代码结构和意图,也是一项必备的能力。那它们有什么规律呢?Java项目的代码结构,能够体现它的设计理念。Java采用长命......
  • SpringBoot定义优雅全局统一Restful API 响应框架二
    这里解决之前留下来的问题,当程序没有正常返回时候就是程序由于运行时异常导致的结果,有些异常我们可,能无法提前预知,不能正常走到我们return的R对象返回。这个时候该如何处理在SpringBoot中,可以使用@ControllerAdvice注解来启用全局异常处理。通过使用@ControllerAdvice注解,可以捕......
  • SpringBoot定义优雅全局统一Restful API 响应框架
    假如现在有一个Java项目,老板让你做项目组长,定义项目基础框架,系统技术架构选型,你应该如何设计一个规范的统一的RestfulAPI响应框架呢思考目前项目开发,都是基于前后端分离模式开发的,基于后端模板引擎那一套,可能已经不适用一些项目开发流程,和当下开发模式了,尤其在要写比......