问题标签 [python-attrs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1702 浏览

python - Python attrs - 超类中的位置属性,而子类中的可选属性

我有 2 个非常相似的课程:A 和 B:

如您所见,它们共享 2 个属性(x 和 y),但在 A 类中,y 属性是位置属性,而在 B 中是可选的。

我想将这些类分组到一个超类中,但是如果我尝试让 B 类从 AI 类继承,则会出现以下错误:

添加了我用来引发错误的代码:

所以我的问题是:是否可以使用 attrs 模块将这些类分组到一个超类中?如果不是,您是否建议我像“旧时尚”那样将它们分组(自己实现 init 方法)?

非常感谢!

0 投票
3 回答
311 浏览

python-attrs - 仅在 attr.s 类的 repr 中显示非默认属性

我正在使用attrs来定义没有样板代码的简单类。装饰器会自动生成一个__repr__显示所有属性的值。我只想显示没有默认值的属性:

有没有相当简单的方法来实现这一点?

0 投票
1 回答
3436 浏览

python - Python - 从抽象类继承的 attrs 类

我很好奇attrs如何与抽象类结合使用。我想定义一个抽象类,它定义了每个继承类必须具有的抽象属性。

我想为这个继承类使用 attrs 来定义它的属性。所以我试着玩一下两者:

引发以下错误:

也许有一种方法可以使用 attrs 将属性声明为抽象的?:

如果有人找到更好的方法来获得这两个模块的好处,我将非常感激!

提前谢谢了!

0 投票
0 回答
816 浏览

python - 将 attr 与 pylint 一起使用

使用attrs 包似乎会导致 PyLint 出现错误:

PyLint 抱怨以下错误消息(不相关的已删除):

有没有一种直接的方法可以让 attrs 与 pylint 一起正常工作?

0 投票
3 回答
734 浏览

pytest - 使用 python-attrs 动态“对象化”嵌套数据结构

使用任意字典(最终具有嵌套集合和基本类型),使用 python-attrs 使其成为嵌套对象列表的最佳方法是什么?

一些限制:字典键始终是字符串(即有效的 Python 标识符),其值仅包含本机集合类型、字符串、整数和浮点数。任何完全深度的嵌套字典都将始终具有相同的特征。在任何列表或元组中,所有项目都将是相同类型或无。而且很可能我的字典将始终是有序映射,因此该顺序应保留在生成的顶级列表和每个嵌套映射中。

例如:

我想得到一个可以使用属性遍历的两个对象的列表:

即,结果将是“对象化”嵌套映射。我怎么能用 attrs 做到这一点?是一些循环attr.make_class()调用的方式吗?

0 投票
1 回答
713 浏览

python - python-attrs:子类中的验证器

使用 Python 模块 attrs,我试图创建一个子类,其属性条件比其父类更严格,如下面的最小示例所示。

像上面那样定义验证器会引发错误(NameError: name 'x' is not defined)。

我通过x在子类中重新定义找到了一种解决方法。

但是它打乱了属性的顺序。

所以,最后,我最终重新定义了子类中的所有属性(实际代码中不止两个)。

有没有更优雅的方法来做到这一点?

0 投票
1 回答
4656 浏览

python - 使用 attrs 将 JSON 转换为 Python 类

我想知道是否可以使用attrs库将嵌套的 JSON 转换为 Python 类实例,以便我可以通过点符号 ( object.attribute.nested_attribute) 访问该 JSON 中的属性。

我的 JSON 有一个固定的模式,我可以手动定义该模式的类,但我不确定是否可以将 JSON 转换为嵌套类结构而不必实例化每个嵌套对象分别。我基本上是在寻找一个fromdict()知道(基于键)将 JSON 对象转换为哪个类的函数。

(我也知道还有其他方法可以构建“DotDicts”,但这些对我来说似乎总是有点老套,可能需要彻底测试以验证它们是否正常工作。)

0 投票
2 回答
437 浏览

python - 使用`attrs`包将传递的数据存储在对象中两次

我正在创建一个数据提供者类,它将保存数据、执行转换并使其可用于其他类。

如果用户创建这个类的实例并在实例化时传递一些数据,我想将它存储两次:一次用于所有转换,一次作为原始数据的副本。让我们假设数据本身有一个copy方法。

我正在使用attrs包来创建类,但通常也会对最好的方法感兴趣(也许有更好的方法来获得我想要的东西?)

这是我到目前为止所拥有的:

这不起作用:AttributeError: '_CountingAttr' object has no attribute 'copy'

我也不能打电话data_copy = self.data.copy(),我得到错误:NameError: name 'self' is not defined

没有包的工作等效项attrs是:

编辑:

正如@hynek 所指出的,我上面的简单 init 方法需要更正以制作数据的实际副本:即self.data_copy = data.copy(). 否则两者self.data都会self.data_copy指向同一个对象。

0 投票
0 回答
382 浏览

python-attrs - Attr:反序列化深度嵌套的 json?

我有一个深度嵌套的 JSON 结构,如下所示:

我的课程:

我想将它们反序列化为 attr 类,

但是js的links字段还是字典,不是LinkInfo对象?

0 投票
1 回答
1232 浏览

python - 如何指定属性必须是(比如说)整数列表,而不仅仅是列表?

使用attrs 库和 Python 3.6,我认为以下内容可以让我指定它x并且y只能包含整数:

两条注释行都抛出一个NameError: name 'List' is not defined.

我期望它起作用的原因是:

(1) attr 文档的类型部分包括以下段落:“attrs还允许您使用 attr.ib() 的类型参数或 - 从 Python 3.6 开始 - 使用 PEP 526-annotations 将类型与属性相关联” . 然后它演示了这两种方法:

(2) PEP 526声明以下类型注释的语法是有效的:primes: List[int] = [].