【PY模块】写类神器 attr(内置库) [ Python极客 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:19")}}更新解决痛点
常规定义类的参数,如果参数很多(几十个),这样写,就很不方便
class TestInfo():
# 定义类参数
name: str = None
age: int = None
# 构造器 初始化
def __init__(self, name: str, age: int):
self.name = name
self.age = age
# 为了方便打印 重写 __repr__
def __repr__(self):
return f'{self.__class__.__name__}(name={self.name}, age={self.age})'
if __name__ == '__main__':
tinfo = TestInfo(name='boy', age=16)
print(tinfo)
[]()
attr 写法
使用 attr 的写法,可以少写 __init 、__repr,并且打印也比较方便
from attr import attrs, attr, fields_dict
@attrs
class Info():
# 定义类参数
name = attr(type=str, default=None)
age = attr(type=int, default=18)
if __name__ == '__main__':
info = Info(name='boy')
print(info)
print(fields_dict(Info))
[]()
attr 属性用法
参数 | 解释 |
---|---|
type | 类型,比如 int、str 等各种类型,默认为 None |
default | 属性的默认值,如果没有传入初始化数据,那么就会使用默认值,如果没有默认值定义,那么就是 NOTHING,即没有默认值 |
validator | 验证器,检查传入的参数是否合法,三个参数(实例,属性,值) |
init | 是否参与初始化,如果为 False,那么这个参数不能当做类的初始化参数,默认 是 True 。 |
metadata | 元数据,只读性的附加数据 |
converter | 转换器,进行一些值的处理和转换器,增加容错性 |
kw_only | 是否为强制关键字参数,默认为 False |
from attr import attrs, attr
def age_va(instance, attribute, value):
"instance: 实例 attribute: 参数 value: 值"
print(instance.name) # boy
if value > 18:
raise ValueError(f'age 大于 18')
@attrs
class Info():
# 定义类参数
name = attr(type=str, default=None)
age = attr(type=int, default=17, validator=age_va)
if __name__ == '__main__':
info = Info(name='boy', age=9)
print(info)
[]()
{{nature('2020-01-02 16:47:07')}} {{format('12522')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9410')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7405')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('4880')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}