问题标签 [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.
python - Python attrs - 超类中的位置属性,而子类中的可选属性
我有 2 个非常相似的课程:A 和 B:
如您所见,它们共享 2 个属性(x 和 y),但在 A 类中,y 属性是位置属性,而在 B 中是可选的。
我想将这些类分组到一个超类中,但是如果我尝试让 B 类从 AI 类继承,则会出现以下错误:
添加了我用来引发错误的代码:
所以我的问题是:是否可以使用 attrs 模块将这些类分组到一个超类中?如果不是,您是否建议我像“旧时尚”那样将它们分组(自己实现 init 方法)?
非常感谢!
python-attrs - 仅在 attr.s 类的 repr 中显示非默认属性
我正在使用attrs来定义没有样板代码的简单类。装饰器会自动生成一个__repr__
显示所有属性的值。我只想显示没有默认值的属性:
有没有相当简单的方法来实现这一点?
pytest - 使用 python-attrs 动态“对象化”嵌套数据结构
使用任意字典(最终具有嵌套集合和基本类型),使用 python-attrs 使其成为嵌套对象列表的最佳方法是什么?
一些限制:字典键始终是字符串(即有效的 Python 标识符),其值仅包含本机集合类型、字符串、整数和浮点数。任何完全深度的嵌套字典都将始终具有相同的特征。在任何列表或元组中,所有项目都将是相同类型或无。而且很可能我的字典将始终是有序映射,因此该顺序应保留在生成的顶级列表和每个嵌套映射中。
例如:
我想得到一个可以使用属性遍历的两个对象的列表:
即,结果将是“对象化”嵌套映射。我怎么能用 attrs 做到这一点?是一些循环attr.make_class()
调用的方式吗?
python - python-attrs:子类中的验证器
使用 Python 模块 attrs,我试图创建一个子类,其属性条件比其父类更严格,如下面的最小示例所示。
像上面那样定义验证器会引发错误(NameError: name 'x' is not defined
)。
我通过x
在子类中重新定义找到了一种解决方法。
但是它打乱了属性的顺序。
所以,最后,我最终重新定义了子类中的所有属性(实际代码中不止两个)。
有没有更优雅的方法来做到这一点?
python - 使用 attrs 将 JSON 转换为 Python 类
我想知道是否可以使用attrs库将嵌套的 JSON 转换为 Python 类实例,以便我可以通过点符号 ( object.attribute.nested_attribute
) 访问该 JSON 中的属性。
我的 JSON 有一个固定的模式,我可以手动定义该模式的类,但我不确定是否可以将 JSON 转换为嵌套类结构而不必实例化每个嵌套对象分别。我基本上是在寻找一个fromdict()
知道(基于键)将 JSON 对象转换为哪个类的函数。
(我也知道还有其他方法可以构建“DotDicts”,但这些对我来说似乎总是有点老套,可能需要彻底测试以验证它们是否正常工作。)
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
指向同一个对象。
python-attrs - Attr:反序列化深度嵌套的 json?
我有一个深度嵌套的 JSON 结构,如下所示:
我的课程:
我想将它们反序列化为 attr 类,
但是js的links字段还是字典,不是LinkInfo对象?
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] = []
.