目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

Python全系列 教程

3567个小节阅读:5930.1k

收藏
全部开发者教程

鸿蒙应用开发

C语言快速入门

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(332)
赞(0)

dataclass

使用类

为了支持数据修改, 默认值, 比较等功能。更加好一些的方法是:使用自定义类来实现数据类。

缺点

  • __init__方法中重复代码 (示例中每个属性都需要写3遍)

  • 需要自己实现__repr__方法, 和比较方法__eq__, __gt__

使用dataclass

dataclass 可以认为是提供了一个简写__init__方法的语法糖,类型注释是必填项 (不限制数据类型时, 添加typing.Any为类型注释), 默认值的传递方式和__init__方法的参数格式一致。

优点

可以使用 dataclasses 模块中的其它方法,比如:

  • 转为字典 asdict

  • 转为元组 astuple

dataclass装饰器上的参数

dataclass装饰器将根据类属性生成数据类和数据类需要的方法。

key含义
init指定是否自动生成__init__,如果已经有定义同名方法则忽略这个值,也就是指定为True也不会自动生成
repr同init,指定是否自动生成__repr__;自动生成的打印格式为class_name(arrt1:value1, attr2:value2, ...)
eq同init,指定是否生成__eq__;自动生成的方法将按属性在类内定义时的顺序逐个比较,全部的值相同才会返回True
order自动生成__lt____le____gt____ge__,比较方式与eq相同;如果order指定为True而eq指定为False,将引发ValueError;如果已经定义同名函数,将引发TypeError
unsafehash如果是False,将根据eq和frozen参数来生成__hash__:
1. eq和frozen都为True,__hash__将会生成
2. eq为True而frozen为False,__hash__被设为None
3. eq为False,frozen为True,__hash__将使用超类(object)的同名属性(通常就是基于对象id的hash) 当设置为True时将会根据类属性自动生成__hash__,然而这是不安全的,因为这些属性是默认可变的,这会导致hash的不一致,所以除非能保证对象属性不可随意改变,否则应该谨慎地设置该参数为True
frozen设为True时对field赋值将会引发错误,对象将是不可变的,如果已经定义了__setattr____delattr__将会引发TypeError

dataclass成员变量额外设置

可以通过dataclass.filed方法设置变量的额外功能

  • defualt:设置默认值

    • 值为具体的值

  • default_factory:设置默认值

    • 值为类型名,程序会根据类型名创建一个空的对象,若使用defualt设置需要手动创建空对象

  • repr设置生成的__repr__方法中是否加入此属性,默认是True

dataclass建立类变量

在类中建立变量,默认是成员变量,若需要设置类变量,需要设置类型为:ClassVar

实时学习反馈

1. _______装饰器将根据类属性生成数据类和数据类需要的方法。

A dataclass

B class

2. dataclass建立类变量,需要设置类型为_____:

A Class

B ClassVar

C classVar

答案

1=>A 2=>B

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2