小黑黑日常积累:dataclass的简单使用
在Python中,dataclass是dataclasses模块提供的一个装饰器,用于简化类的定义,自动生成诸如__init__、__repr__等方法。以下是dataclass的简单使用方法:
基本使用
定义一个简单的dataclass只需使用@dataclass装饰器并声明类的属性,可以使用frozen=True冻结参数(对象初始化后,参数不得修改)
from dataclasses import dataclass@dataclass
class Student(object):sid:intname:strage:intscore:floatgender:str
# 使得对象经过初始化后参数不能修改
@dataclass(frozen=True)
class Class:name: strmember: list[Student]s1 = Student(1, 'daheilv', 28, 59, 'male')
s1_copy = Student(1, 'daheilv', 28, 59, 'male')
print(s1)
s2 = Student(1, 'xiaohei', 27, 99, 'male')
print(s2)
print('s1==s1_copy:',s1==s1_copy)
donkeyClass = Class('donkeyClass', [s1, s2])
Student(sid=1, name=‘daheilv’, age=28, score=59, gender=‘male’)
Student(sid=1, name=‘xiaohei’, age=27, score=99, gender=‘male’)
s1==s1_copy: True
无法修改参数
# 改变一下donkeyClass属性值
donkeyClass.name = 'CawClass'
在 Python 的 dataclass 中,field 用于定制化字段的行为。默认情况下,dataclass 会自动生成 init 方法,并为每个类变量赋予相应的值。但通过 field,可以更灵活地控制字段的初始化、默认值、比较行为等。
default_factory允许动态生成默认值,常用于初始化可变对象(如列表、字典等)
from dataclasses import dataclass, field, asdict
@dataclass
class Cat:name: strcolor: strweight: str = field(default='5')children1:list=field(default_factory=lambda:[1,2,3])children2:dict=field(default_factory=lambda:{'name':'猫'})
tom = Cat('Tom', 'red')
tom
Cat(name=‘Tom’, color=‘red’, weight=‘5’, children1=[1, 2, 3], children2={‘name’: ‘猫’})
通过init=False使得该参数不被init方法所接收
@dataclass
class Cat_reprFalse:name: strcolor: strweight: str = field(default='5')children1:list=field(default_factory=lambda:[1,2,3])children2:dict=field(default_factory=lambda:{'name':'猫'}, init=False)
tom = Cat_reprFalse('Tom', 'red','5',[1,2,3],{'name':'猫'})
通过repr=False使得该参数不被打印
@dataclass
class Cat_reprFalse:name: strcolor: strweight: str = field(default='5')children1:list=field(default_factory=lambda:[1,2,3])children2:dict=field(default_factory=lambda:{'name':'猫'}, repr=False)
tom = Cat_reprFalse('Tom', 'red','5',[1,2,3],{'name':'猫'})
tom
Cat_reprFalse(name=‘Tom’, color=‘red’, weight=‘5’, children1=[1, 2, 3])
继续加油,先不沉迷细节,把流程走通!!