python数据类dataclass
优势
- 可读性强
- 操作灵活
- 轻量
- 应用场景
** 创建对象
** 完美融合平台开发ORM框架
参考实例。实现方案
- 使用dataclass创建数据类
- 实例化的时候自动生成构造函数
** 案例
'''
案例
场景:如果创建一只猫,信息包括猫的名字,体重,颜色,同时打印这个对象的时候,洗碗能打印出一个字符串(包含猫的各种信息),应该如何编码
问题:
数据修改不方便
代码冗余
解决方案:
使用自定义类实现数据类
'''
** 原码
class Cat:
name : str
color : str
weihgt : int
def __init__(self,name,color,weihgt):
self.name = name
self.color = color
self.weihgt = weihgt
def __str__(self):
return f"猫名字:{self.name},年龄:{self.weihgt}, 颜色:{self.color}"
def __repr__(self):
return f"===>>>>>猫名字:{self.name},年龄:{self.weihgt}, 颜色:{self.color}"
** 优化修正
field的使用
- 可变参数需要通过default_factory来指定类型或者默认值
field常用参数
-
default: 字段的默认值
** aa : str = dataclasses.field(default=4) # 指定默认值为4 -
default_factory: 定义可变量参数的默认值,不能与 default 同时存在
** children : list = dataclasses.field(default_factory =list) # 指定默认值的空list -
init: 如果为 true默认值,该字段作为参数包含在生成的init()方法中
** 如果为false,该字段不会包含init()方法的参数中
** 在实例化的时候是否需要传递此参数,ture必须要,false选填但是需要默认值
** weihgt : int = field(default = 3, init = False) # 默认值为3,选填项
** weihgt : int = field(init = Ture) # 必填 -
repr:如果为 true默认值,该字段包含在生成的repr()方法返回的字符串中
** 如果为False,该字段不会包含在生成的repr()方法返回的字符串中
** 为False时,print、return、logging都不出会出该字段
asdict() 转化实例对象为字典格式
from dataclasses import dataclass,field,asdict
@dataclass
class Cats:
name : str
color : str
weihgt : int
children : list = field(default_factory=list)
if __name__ == '__main__':
cas = Cats('英短',9,'黑色',[3,8,6,8])
print(cas)
# 结果是: Cats(name='英短', color=9, weihgt='黑色', children=[3, 8, 6, 8])
print(asdict(cas))
# 结果是: {'name': '英短', 'color': 9, 'weihgt': '黑色', 'children': [3, 8, 6, 8]}