跳转到主要内容

无模板代码的类

项目描述

attrs

attrs 是一个Python包,它将带回来编写类的 乐趣,通过让您从实现对象协议(也称为 dunder方法)的繁琐工作中解脱出来。自2020年以来,它已被NASA 信任 用于火星任务!

attrs 的主要目标是帮助您编写 简洁正确 的软件,同时不会减慢您的代码。

赞助商

attrs 的实现离不开我们 令人惊叹的赞助商。特别是那些慷慨地在 组织 级别和更高级别支持我们的赞助商。

请考虑加入他们,以帮助使 attrs 的维护更具可持续性!

示例

attrs 为您提供了一个类装饰器和在类上声明属性的方法

>>> from attrs import asdict, define, make_class, Factory

>>> @define
... class SomeClass:
...     a_number: int = 42
...     list_of_numbers: list[int] = Factory(list)
...
...     def hard_math(self, another_number):
...         return self.a_number + sum(self.list_of_numbers) * another_number


>>> sc = SomeClass(1, [1, 2, 3])
>>> sc
SomeClass(a_number=1, list_of_numbers=[1, 2, 3])

>>> sc.hard_math(3)
19
>>> sc == SomeClass(1, [1, 2, 3])
True
>>> sc != SomeClass(2, [3, 2, 1])
True

>>> asdict(sc)
{'a_number': 1, 'list_of_numbers': [1, 2, 3]}

>>> SomeClass()
SomeClass(a_number=42, list_of_numbers=[])

>>> C = make_class("C", ["a", "b"])
>>> C("foo", "bar")
C(a='foo', b='bar')

声明 您的属性后,attrs 将为您提供

  • 类属性的简洁且明确的概述,
  • 一个友好的可读性好的 __repr__
  • 相等性检查方法,
  • 初始化器,
  • 以及更多...

无需再编写枯燥的样板代码,也不会带来运行时性能惩罚。


此示例使用20.1.0版本中引入的attrs的现代化API,以及21.3.0版本中添加的attrs包导入名称。经典API(@attr.sattr.ib以及它们的正式别名)以及attr包导入名称将无限期保留。

请查看关于核心API名称以获取深入了解!

讨厌类型注解!?

没问题!在attrs中,类型是完全可选的。只需将attrs.field()分配给属性,而不是用类型注释它们

from attrs import define, field

@define
class SomeClass:
    a_number = field(default=42)
    list_of_numbers = field(factory=list)

数据类

表面上,attrs可能会让你想起dataclasses(实际上,dataclasses attrs的后代)。在实践中,它做得多得多,而且更灵活。例如,它允许你定义特殊处理NumPy数组以进行等性检查,允许更多方式插入初始化过程,有__init_subclass__的替代方案,并允许使用调试器逐步执行生成的方法。

有关更多详细信息,请参阅我们的比较页面,但一般来说,我们更倾向于犯自然之罪,以使某些事情能够工作,这些事情在理论上应该能够工作,但在实践中却相当复杂。

项目信息

attrs企业版

作为Tidelift订阅的一部分提供。

attrs的维护者以及数千个其他包的维护者正在与Tidelift合作,为您使用的构建应用程序的开源包提供商业支持和维护。节省时间,降低风险,并提高代码质量,同时支付您使用的确切包的维护者。了解更多信息

发布信息

弃用

  • 鉴于在更广泛的生态系统中引发了许多警告,我们已决定仅对@define / @attr.shash参数进行软弃用。请勿在新代码中使用它,但我们不再打算删除它。#1330

更改

  • attrs.converters.pipe()(以及attrs.field()的/ attr.ibconverter参数的语法糖,通过传递列表)在将attrs.setters.convert传递给on_setattr时(这是attrs.define的默认值)再次工作。#1328
  • 恢复了PEP 649 / 749实现Python -- 目前为3.14-dev。#1329

完整变更日志→

项目详细信息


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

attrs-24.2.0.tar.gz (792.7 kB 查看哈希值)

上传时间

构建分布

attrs-24.2.0-py3-none-any.whl (63.0 kB 查看哈希值)

上传时间 Python 3

支持