python之dataclass

dataclass

dataclass是python本身自带的一个内置模块,很大程度上可以降低我们代码的复杂度

# 常规写法
class Cat:
    # 定义属性
    name: str
    color: str
    weight: int

    # 初始化一个init方法
    def __init__(self, name, color, weight):
        self.name = name
        self.color = color
        self.weight = weight


cat = Cat('lili', '白色', 15)
print(cat.name)  # Output:lili
print(cat.color)  # Output:白色
print(cat.weight)  # Output:15

#使用__str__方法
class Cat:
    # 定义属性
    name: str
    color: str
    weight: int

    # 初始化一个init方法
    def __init__(self, name, color, weight):
        self.name = name
        self.color = color
        self.weight = weight

    # 返回的内容以字符串形式输出
    def __str__(self):
        return f'猫猫的名字:{self.name}, 猫猫的颜色:{self.color},猫猫的体重:{self.weight}kg'


cat = Cat('lili', '白色', 15)
print(cat)

使用dataclass减少代码复杂度

from dataclasses import dataclass


# 需要在类方法上加装饰器,需要为变量加类型提示
@dataclass
class Cat:
    name: str
    color: str
    weight: int


if __name__ == '__main__':
    cat = Cat('lili', '白色', 15)
    print(cat)

field的使用

当field指定后,下方没有指定就用field指定的数,下方有指定则用指定的

from dataclasses import dataclass, field


# field是要放在没有默认字段后面的,color可以定义是因为weight定义过了
@dataclass
class Cat:
    name: str
    color: str = field(default='lili')
    weight: int = field(default=15)


cat = Cat('lili')
print(cat)
参数名 参数功能
default 字段的默认值
default_factory 定义可变量参数的默认值,default 和 default_factory 不能同时存在
init 如果为 true(默认值),该字段作为参数包含在生成的 init() 方法中。
repr 如果为 true(默认值),该字段包含在生成的 repr() 方法返回的字符串中。
from dataclasses import dataclass, field


# field是要放在没有默认字段后面的,color可以定义是因为weight定义过了
@dataclass
class Cat:
    name: str
    # default是默认值,如果下方不定义就调用默认值
    color: str = field(default='white')
    weight: int = field(default=15)
    # 如果下方想要调用init方法要为True
    # age: int = field(default=7, init=True)
    # init方法为False时下方不能调用
    age: int = field(default=7, init=False)


cat = Cat(name='lili')
print(cat)