{{format('0')}} {{format('399')}} {{format('1922')}}

【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)

[mark]()

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))

[mark]()

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)

[mark]()

评论 0
0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}
TOP 2
Spark 2.0 单机模式与集群模式 安装

{{nature('2020-01-02 16:47:07')}} {{format('12522')}}人已阅读

TOP 3
Office 2016 Pro Plus 激活

{{nature('2019-12-11 20:43:10')}} {{format('9410')}}人已阅读

TOP 4
Linux上 MySQL 开启远程登陆的两种方法

{{nature('2019-12-26 17:20:52')}} {{format('7405')}}人已阅读

TOP 5
Linux 安装 MySQL 5.7

{{nature('2019-12-26 16:03:55')}} {{format('4880')}}人已阅读

目录

标签云

Python 模块

一言

# {{hitokoto.data.from || '来自'}} #
{{hitokoto.data.hitokoto || '内容'}}
作者:{{hitokoto.data.from_who || '作者'}}
自定义UI
配色方案

侧边栏