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)