一图看懂 attrs 模块:一个在类定义时可替换 `__init__`, `__eq__`, `__repr__`等方法的样板,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。
链接: https://blog.csdn.net/Ahcao2008

Alt

一图看懂 attrs 模块:一个在类定义时可替换 `__init__`, `__eq__`, `__repr__`等方法的样板,资料整理+笔记(大全)

🧊摘要

  • 全文介绍python的 attrs 模块(一个在类定义时可替换 __init__, __eq__, __repr__等方法的样板)、函数、类及类的方法和属性。
  • 它通过代码抓取并经AI智能翻译和人工校对。
  • 是一部不可多得的权威字典类工具书。它是系列集的一部分。后续陆续发布、敬请关注。【原创:AhcaoZhu大侠】

🧊模块图

attrs-module

attrs
	attrs.converters
	attrs.exceptions
	attrs.filters
	attrs.setters
	attrs.validators

🧊类关系图

attrs-class

◆object
	◆BaseException
		◆Exception
			◆AttributeError
				attr.exceptions.FrozenError
					attr.exceptions.FrozenAttributeError
					attr.exceptions.FrozenInstanceError
			◆RuntimeError
				attr.exceptions.DefaultAlreadySetError
				attr.exceptions.PythonTooOldError
				attr.exceptions.UnannotatedAttributeError
			◆TypeError
				attr.exceptions.NotCallableError
			◆ValueError
				attr.exceptions.AttrsAttributeNotFoundError
				attr.exceptions.NotAnAttrsClassError
	attr.AttrsInstance
	attr._make.Attribute
	attr._make.Factory

🧊模块全展开

☘️【attrs】

attrs, fullname=attrs, file=attrs_init_.py

没有样板的类<https://www.attrs.org/>

🔵统计

序号类别数量
4str13
6list2
8dict1
9module5
10class3
11function14
13residual5
14system19
16all43

🔵常量

🔵模块

🌿1 attrs.converters

converters, fullname=attrs.converters, file=attrs\converters.py

🌿2 attrs.exceptions

exceptions, fullname=attrs.exceptions, file=attrs\exceptions.py

🌿3 attrs.filters

filters, fullname=attrs.filters, file=attrs\filters.py

🌿4 attrs.setters

setters, fullname=attrs.setters, file=attrs\setters.py

🌿5 attrs.validators

validators, fullname=attrs.validators, file=attrs\validators.py

🔵函数

🌿6 assoc(inst, **changes)

assoc(inst, **changes), module=attr._funcs, line:302 at site-packages\attr_funcs.py

复制 *inst*和应用 *changes*。
    :param inst:具有``attrs``属性的类实例。
    :param changes:新副本中关键字的变化。
    :return: 包含了*changes*的inst副本。
    :raise attr.exceptions.AttrsAttributeNotFoundError: 如果无法在 *cls* 上找到*attr_name*。
    :raise attr.exceptions.NotAnAttrsClassError: If *cls*不是一个 ``attrs`` 类。
    已弃用: 17.1.0
    此函数不会因为与`attrs.evolve`略有不同的方法而被删除。

🌿7 cmp_using(eq=None, lt=None, le=None, gt=None, ge=None, require_same_type=True, class_name=‘Comparable’)

cmp_using(eq=None, lt=None, le=None, gt=None, ge=None, require_same_type=True, class_name=‘Comparable’), module=attr._cmp, line:13 at site-packages\attr_cmp.py

创建一个类,可以传递给`attr.ib`类的参数:``eq``, ``order``, 和 ``cmp``用于定制字段比较。
如果提供了 ``{lt, le, gt, ge}``  和 ``eq`` 中的至少一个,则生成的类将具有完整的排序方法集。
    :param Optional[callable] eq: `callable` 用于计算两个对象的相等性。
    :param Optional[callable] lt: `callable` 用于计算一个对象是否小于另一个对象。
    :param Optional[callable] le: `callable` 用于计算一个对象是否小于或等于另一个对象。
    :param Optional[callable] gt: `callable`用于计算一个对象是否大于另一个对象。
    :param Optional[callable] ge: `callable` 用于计算一个对象是否大于或等于另一个对象。
    :param bool require_same_type: 当 `True` 时,如果对象不是相同类型,相等和排序方法将返回 `NotImplemented`。
    :param Optional[str] class_name: 类名。缺省为 'Comparable'。
    详情参见:`comparison`
    添加版本: 21.1.0

🌿8 define(maybe_cls=None, *, these=None, repr=None, unsafe_hash=None, hash=None, init=None, slots=True, frozen=False, weakref_slot=True, str=False, auto_attribs=None, kw_only=False, cache_hash=False, auto_exc=True, eq=None, order=False, auto_detect=True, getstate_setstate=None, on_setattr=None, field_transformer=None, match_args=True)

define(maybe_cls=None, *, these=None, repr=None, unsafe_hash=None, hash=None, init=None, slots=True, frozen=False, weakref_slot=True, str=False, auto_attribs=None, kw_only=False, cache_hash=False, auto_exc=True, eq=None, order=False, auto_detect=True, getstate_setstate=None, on_setattr=None, field_transformer=None, match_args=True), module=attr._next_gen, line:24 at site-packages\attr_next_gen.py

定义一个``attrs``类。
与它下面使用的经典 `attr.s` 的区别:
    -自动检测 *auto_attribs* 是否应该为 `True`。
    -如果 *frozen* 为 `False`,默认设置属性时运行转换器和验证器。
    - *slots=True*
    警告:
        通常这在日常编程中只有好处,很少有明显的影响。但它 *可能* 会导致一些令人惊讶的行为,所以请确保阅读 :term:`slotted classes`。
    - *auto_exc=True*
    - *auto_detect=True*
    - *order=False*
    - Some options that were only relevant on Python 2 or were kept around for
      backwards-compatibility have been removed.
    - 一些仅与Python 2相关或为向后兼容而保留的选项已被删除。
    请注意,这些都是默认值,您可以根据需要更改它们。
    :param Optional[bool] auto_attribs: 如果设置为 `True` 或 `False`,它的行为与 `attr.s` 完全相同。
    如果留下 `None`, `attr.s` 会试着猜测:
        1. 如果任何属性都有注释,并且没有未注释的 `attrs.fields`字段发现,则假设 *auto attributes =True*。
        2. 否则,它假设*auto attributes =False*并尝试收集`attrs.fields`。
    目前,请参考 `attr.s` 表示其他参数。
    添加版本: 20.1.0
    版本变更: 21.3.0 转换器也运行``on_setattr``。
    添加版本: 22.2.0
        *unsafe_hash* 作为 *hash* 的别名(对于 :pep:`681` 合规)。

🌿9 evolve(inst, **changes)

evolve(inst, **changes), module=attr._funcs, line:340 at site-packages\attr_funcs.py

创建一个新的实例,基于*inst*,应用*changes*。
    :param inst:具有“attrs”属性的类实例。
    :param changes:新副本中关键字的变化。
    :return: 包含了*changes*的inst副本。
    :raise TypeError: 如果在类 ``__init__`` 中找不到*attr_name*。
    :raise attr.exceptions.NotAnAttrsClassError: If *cls*不是一个``attrs``类。
    版本添加: 17.1.0

🌿10 field(*, default=NOTHING, validator=None, repr=True, hash=None, init=True, metadata=None, converter=None, factory=None, kw_only=False, eq=None, order=None, on_setattr=None, alias=None)

field(*, default=NOTHING, validator=None, repr=True, hash=None, init=True, metadata=None, converter=None, factory=None, kw_only=False, eq=None, order=None, on_setattr=None, alias=None), module=attr._next_gen, line:162 at site-packages\attr_next_gen.py

和 `attr.ib` ,除了仅关键字和删除了一些参数。
添加版本:20.1.0

🌿11 fields(cls)

fields(cls), module=attr._make, line:1901 at site-packages\attr_make.py

返回一个类的``attrs``属性元组。
    元组还允许通过名称访问字段(参见下面的示例)。
    :param type cls: 要内省的类。
    :raise TypeError:如果*cls*不是一个类。
    :raise attr.exceptions.NotAnAttrsClassError: 如果 *cls* 不是``attrs``类。
    :rtype: `attrs.Attribute`的元组(带名称访问器)
    版本变更: 16.2.0 版返回的元组允许按名称访问字段。

🌿12 fields_dict(cls)

fields_dict(cls), module=attr._make, line:1927 at site-packages\attr_make.py

返回一个类的``attrs``属性的有序字典,其键是属性名。
    :param type cls: 要内省的类。
    :raise TypeError: 如果*cls*不是一个类。
    :raise attr.exceptions.NotAnAttrsClassError: 如果 *cls* 不是``attrs``类。
    :rtype: 字典
    版本添加: 18.1.0

🌿13 has(cls)

has(cls), module=attr._funcs, line:290 at site-packages\attr_funcs.py

检查*cls*是否是带有 ``attrs`` 属性的类。
    参数类型cls::引发TypeError: : rtype: bool
    :param type cls: 要内省的类。
    :raise TypeError: 如果 *cls* 不是一个类。
    :rtype: bool

🌿14 make_class(name, attrs, bases=(<class ‘object’>,), **attributes_arguments)

make_class(name, attrs, bases=(<class ‘object’>,), **attributes_arguments), module=attr._make, line:2820 at site-packages\attr_make.py

用 *attrs* 创建一个名为 *name* 的新类的快速方法。
    :param attrs::type attrs: ' list '或' dict ':参数元组基:参数:' attrs .s '。
    :param str name: 新类的名称。
    :param attrs: 名称列表或名称到属性映射的字典。
        顺序是从*attrs*中的名称或属性的顺序推断出来的。否则,将使用属性定义的顺序。
    :type attrs: `list` or `dict`
    :param tuple bases: 新类将继承的类。
    :param attributes_arguments: 未经修改传递给 `attr.s`.
    :return: 带 *attrs* 的新类。
    :rtype: type
    版本添加: 17.1.0 *bases*
    版本变更: 18.1.0 如果 *attrs* 被排序,则保持顺序。

🌿15 define(maybe_cls=None, *, these=None, repr=None, unsafe_hash=None, hash=None, init=None, slots=True, frozen=False, weakref_slot=True, str=False, auto_attribs=None, kw_only=False, cache_hash=False, auto_exc=True, eq=None, order=False, auto_detect=True, getstate_setstate=None, on_setattr=None, field_transformer=None, match_args=True)

define(maybe_cls=None, *, these=None, repr=None, unsafe_hash=None, hash=None, init=None, slots=True, frozen=False, weakref_slot=True, str=False, auto_attribs=None, kw_only=False, cache_hash=False, auto_exc=True, eq=None, order=False, auto_detect=True, getstate_setstate=None, on_setattr=None, field_transformer=None, match_args=True), module=attr._next_gen, line:24 at site-packages\attr_next_gen.py

定义一个``attrs``类。
参见 8 define()

🌿16 resolve_types(cls, globalns=None, localns=None, attribs=None)

resolve_types(cls, globalns=None, localns=None, attribs=None), module=attr._funcs, line:369 at site-packages\attr_funcs.py

解析类型注释中的任何字符串和转发注释。
只有在“Attribute”的“type”字段中需要具体类型时才需要这样做。
换句话说,如果只将类型用于静态类型检查,则不需要解析类型。
如果没有参数,将在创建类的模块中查找名称。
如果这不是你想要的,例如,如果名称只存在于一个方法中,你可以传递*globalns*或*localns*来指定查找这些名称的其他字典。
请参阅`typing.get_type_hints` 文档以获取更多详细信息。
    :param type cls: 要解析的类。
    :param Optional[dict] globalns: 包含全局变量的字典。
    :param Optional[dict] localns: 包含本地变量的字典。
    :param Optional[list] attribs: 指定类的属性列表。当从“字段转换器”内部调用时,这是必要的,因为*cls*还不是一个“attrs”类。
    :raise TypeError: 如果 *cls* 不是一个类。
    :raise attr.exceptions.NotAnAttrsClassError: 如果 *cls* 不是一个类,并且您没有传递任何属性。
    :raise NameError: 如果类型无法解析,因为缺少变量。
    :returns: *cls*,所以你也可以使用这个函数作为类的装饰器。
        请注意,你必须在`attrs.define` 之后提供它。这意味着decorator必须出现在 `attrs.define` 之前的行。
    版本添加: 20.1.0
    版本添加: 21.1.0 *attribs*

🌿17 validate(inst)

validate(inst), module=attr._make, line:1950 at site-packages\attr_make.py

验证*inst*上所有具有验证器的属性。
    保留所有异常。
    :param inst: 具有“attrs”属性的类实例。

🌿18 asdict(inst, *, recurse=True, filter=None, value_serializer=None)

asdict(inst, *, recurse=True, filter=None, value_serializer=None), module=attr._next_gen, line:201 at site-packages\attr_next_gen.py

和 `attr.asdict` 一样。除了总是保留集合类型和dict总是被用作 *dict_factory* 之外。
添加版本: 21.3.0

🌿19 astuple(inst, *, recurse=True, filter=None)

astuple(inst, *, recurse=True, filter=None), module=attr._next_gen, line:217 at site-packages\attr_next_gen.py

和`attr.astuple`一样。除了集合类型总是被保留,`tuple` 总是被用 *tuple_factory*。
添加版本: 21.3.0

🔵类

🌿20 attr._make.Attribute

Attribute, attr._make.Attribute, module=attr._make, line:0 at

*属性的只读*表示。
这个类有*所有*参数attr。ib '(除了' factory ' ',它只是' default= factory(…)' '的语法糖)- ' name ' ' (' str '):属性的名称。- ' ' alias ' ' (' str '):属性的初始化参数名称,在任何显式覆盖和默认private-attribute-name处理之后。- ' ' inherited ' ' (' bool '):该属性是否从基类继承。
-“eq键”和“order键”(输入)。Callable '或' None '):可调用对象,分别用于根据此属性对对象进行比较和排序。
这些是通过传递一个可调用对象来设置的。b 's ' ' eq ' ', ' order ' '或' cmp ' '参数。参见:ref: '
比较定制<custom-comparison> '。
- ' fields '-
:ref: ' field transformer <transform-fields> '-“alias”,Versionadded:: 20.1.0 *inherited* ..版本新增:20.1.0 *on setattr* ..Versionchanged:: 20.2.0 *inherited*不再考虑相等性检查和散列。版本新增:21.1.0 *eq键*和*order键* ..Versionadded:: 22.2.0 *alias*
有关字段的完整版本历史记录,请参阅' attri .ib '。

一个属性的 *Read-only* 只读表示。
    类具有 `attr.ib` 的全部属性 (除了 ``factory``, 它只是异步函数 ``default=Factory(...)``加上以下内容:
    - ``name`` (`str`): 属性名称
    - ``alias`` (`str`):  属性的__init__参数名称, 在任何显式覆盖和默认私有属性名称处理之后。
    - ``inherited`` (`bool`): 不管该属性是否从基类继承。
    - ``eq_key`` 和 ``order_key`` (`typing.Callable` 或 `None`): 分别用于按此属性比较和排序对象的可调用对象。
    - `fields` 返回它们的元组。
    - 验证器将它们作为第一个参数传递。
    - :ref:`field transformer <transform-fields>` 钩子接收一个字段列表。
    - ``alias`` 属性暴露了字段的 __init__ 初始化参数名称,任何覆盖和默认私有属性处理应用。
    版本添加: 20.1.0 *inherited*
    版本添加: 20.1.0 *on_setattr*
    版本变更: 20.2.0 *inherited* 不再考虑相等性检查和哈希。
    版本添加: 21.1.0 *eq_key* and *order_key*
    版本添加: 22.2.0 *alias*
    字段的完整历史版本,请参见:`attr.ib`.
data

1 alias=<member ‘alias’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
2 converter=<member ‘converter’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
3 default=<member ‘default’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
4 eq=<member ‘eq’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
5 eq_key=<member ‘eq_key’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
6 hash=<member ‘hash’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
7 inherited=<member ‘inherited’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
8 init=<member ‘init’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
9 kw_only=<member ‘kw_only’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
10 metadata=<member ‘metadata’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
11 name=<member ‘name’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
12 on_setattr=<member ‘on_setattr’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
13 order=<member ‘order’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
14 order_key=<member ‘order_key’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
15 repr=<member ‘repr’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
16 type=<member ‘type’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>
17 validator=<member ‘validator’ of ‘Attribute’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Attribute’>

method
18 evolve()

kind=method class=Attribute objtype=function

复制 *self* 和应用 *changes*。
这与 `attr.evolve` 的工作原理类似。但该函数不适用于``Attribute``。
它主要用于`transform-fields`。
添加版本:  20.3.0
class method
19 from_counting_attr()

kind=class method class=Attribute objtype=classmethod

将函数转换为类方法。

🌿21 attr.AttrsInstance

AttrsInstance, attr.AttrsInstance, module=attr, line:0 at

🌿22 attr._make.Factory

Factory, attr._make.Factory, module=attr._make, line:0 at

存储可调用的工厂。
如果作为默认值传递给 `attrs.field` ,则使用工厂来生成新值。
    :param callable factory: 一个可调用对象,根据 *takes_self*,它要么不接受,要么只接受一个强制位置参数。
    :param bool takes_self: 传递作为位置参数初始化的部分初始化实例。
    添加版本: 17.1.0 *takes_self*
data

1 factory=<member ‘factory’ of ‘Factory’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Factory’>
2 takes_self=<member ‘takes_self’ of ‘Factory’ objects> kind:data type:member_descriptor class:<class ‘attr._make.Factory’>

🔵剩余

23 loader <_frozen_importlib_external.SourceFileLoader object at 0x000001924E360E48>
24 spec ModuleSpec(name=‘attrs’, loader=<_frozen_importlib_external.SourceFileLoader object at 0x000001924E360E48>, origin=‘…\lib\site-packages\attrs\init.py’, submodule_search_locations=[‘…\lib\site-packages\attrs’])
25 NOTHING _Nothing.NOTHING
26 version_info VersionInfo(year=22, minor=2, micro=0, releaselevel=‘final’)
27 frozen functools.partial(<function define at 0x000001924E446678>, frozen=True, on_setattr=None)

☘️【attrs.converters】

converters, fullname=attrs.converters, file=attrs\converters.py

☘️【attrs.exceptions】

exceptions, fullname=attrs.exceptions, file=attrs\exceptions.py

☘️【attrs.filters】

filters, fullname=attrs.filters, file=attrs\filters.py

☘️【attrs.setters】

setters, fullname=attrs.setters, file=attrs\setters.py

☘️【attrs.validators】

validators, fullname=attrs.validators, file=attrs\validators.py

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AhcaoZhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值